【发布时间】:2020-07-06 19:02:54
【问题描述】:
我在评估生成器表达式时遇到了一个奇怪的问题。
我的代码有一个生成器表达式,可以测试几个条件。我们称之为“gen_ex”。如果我把它变成一个列表来查看输出:
print(list(gen_ex))
我明白了:
[False, False, False, False, True, True, False, False, False]
但是,当我对它使用 any() 和 all() 时,我得到了意想不到的结果。
any(gen_ex)
返回 False,而:
all(gen_ex)
返回 True。
这应该是预期的行为吗?还是幕后发生了什么奇怪的事情?
【问题讨论】:
-
创建列表会耗尽生成器;
any和all都没有看到任何要测试的值,因此分别对False和True进行空评估。 -
...这就是你所做的一切吗?因为如果您执行
list(gen_ex),那么生成器将被消耗,之后始终为空,因此,any将始终返回 false,alltrue 将始终在空迭代器上返回 true...请始终发布 @ 987654321@ 这样我们就可以真正重现您正在做的事情并避免这种不必要的猜测