内置函数all()
应该等同于:
def all(iterable):
for element in iterable:
if not element:
return False
return True
但是当生成器表达式传递给all()
时,行为是不同的:
l=(1,2,3)
def all2(iterable):
for element in iterable:
if not element:
return False
return True
print all(e > 0 for e in l) # <generator object <genexpr> at 0x00000000096AB510>
print all2(e > 0 for e in l) # True
其他类似的内置插件也是如此。有没有一种简单的方法来解决它? (由于占用空间,将生成器表达式转换为元组或列表实际上不是一种选择。)
答案 0 :(得分:1)
numpy
有自己的all
函数,其行为与内置all
不同:
>>> numpy.all(x for x in range(3))
<generator object <genexpr> at 0x0000000001FD2900>
>>> all(x for x in range(3))
False
如果由于某种原因all
引用numpy.all
而不是__builtin__.all
,可能是由于from numpy import *
或由于Python发行版执行的自动导入而导致的,{&1;}重新使用,您将获得NumPy行为而不是内置行为。