Если вы используете, any(lst)вы увидите, что lstэто итерация, которая представляет собой список некоторых элементов. Если бы он содержал [0, False, '', 0.0, [], {}, None](все они имеют логические значения False), то any(lst)был бы False. Если бы lstтакже содержалось что-либо из следующего [-1, True, "X", 0.00001](все из которых оцениваются True), тогда any(lst)было бы True.
В опубликованном вами коде x > 0 for x in lstэто другой тип итерации, называемый выражением генератора . Перед выражения генератора были добавлены в Python, вы бы создали список понимание , который очень похож, но с окружающими []«s: [x > 0 for x in lst]. Из lstсодержащего [-1, -2, 10, -4, 20], вы получите этот постиг список : [False, False, True, False, True]. Затем это внутреннее значение будет передано anyфункции, которая вернется True, поскольку есть хотя бы одно Trueзначение.
Но с выражениями генератора Python больше не должен создавать этот внутренний список True(s)и False(s), значения будут генерироваться по мере того, как anyфункция выполняет итерацию по значениям, генерируемым по одному выражением генератора. И , поскольку происходит anyкороткое замыкание, он прекратит итерацию, как только увидит первое Trueзначение. Это будет особенно удобно, если вы создали lstчто-то вроде lst = range(-1,int(1e9))(или xrangeиспользуете Python2.x ). Несмотря на то, что это выражение сгенерирует более миллиарда записей, anyему нужно пройти только до третьей записи, когда она дойдет до 1, которая вычисляет Trueдля x>0и поэтому anyможет возвращаться True.
Если бы вы создали представление списка , Python сначала пришлось бы создать список из миллиардов элементов в памяти, а затем передать его в any. Но, используя выражение генератора , вы можете получить встроенные функции Python, такие как anyи all, преждевременное прерывание, как только будет обнаружено значение Trueили False.
any(x > 0 for x in list)это просто синтаксический сахар дляany((x > 0 for x in list)).