如果您使用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之前,您已经创建了一个 ,它看起来非常相似,但是带有[]
:[x > 0 for x in lst]
。从lst
包含的 清单 中[-1, -2, 10, -4, 20]
,您可以得到:。然后,由于有至少一个值,此内部值将传递给该函数,该函数将返回。 __[False, False, True, False, True]``any``True``True
但是使用 ,Python不再需要创建True(s)
and的内部列表,False(s)
因为any
函数迭代生成器表达式一次生成的值时将生成值。 并且 ,由于any
短路,一旦看到第一个True
值,它将立即停止迭代。如果lst
使用类似方法创建lst = range(-1,int(1e9))
(或者xrange
如果使用 Python2.x ),则这将特别方便。即使此表达式将生成超过十亿个条目,any
但到达时只需要到达第三个条目1
,它的值就True
为x>0
,因此any
可以返回True
。
如果您创建了 ,Python首先必须在内存中创建十亿个元素的列表,然后将其传递给any
。但是,通过使用 ,您可以在看到a或value时就拥有Python的内置函数,例如likeany
和all
早早爆发。True``False