了解将可迭代对象传递给 python's all



使用all,我理解这一点,例如:

l = [1, 2, 3, 4, 5, 6]
all([n > 0 for n in l])

一切都需要一个可迭代的,一切都好。

这是怎么回事(没有方括号,没有列表理解(:

all(n > 0 for n in l)

但这不起作用(在没有all的情况下调用它(:

n > 0 for n in l(SyntaxError(

显然,这是有效的:

[n > 0 for n in l]

调用any时发生了什么,为什么它将n > 0 for n in l作为可迭代项?谢谢

您正在传递生成器表达式,生成器是可迭代的

与相同

gen = (n > 0 for n in l)
print(all(gen))

显然,这对有效

这是一个列表理解,与问题无关。将它传递给all函数会不必要地创建一个内存中的列表,因此会多次迭代该列表——一次要创建,一次要测试所有元素

最新更新