使用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函数会不必要地创建一个内存中的列表,因此会多次迭代该列表——一次要创建,一次要测试所有元素