2

内置函数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

其他类似的内置插件也是如此。有没有简单的方法来解决它?(由于占用空间,将生成器表达式转换为元组或列表并不是一个真正的选择。)

4

1 回答 1

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 发行版执行的自动导入,您将获得 NumPy 行为而不是内置的行为。

于 2014-05-08T04:23:42.253 回答