【发布时间】:2014-06-25 06:51:01
【问题描述】:
内置函数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
其他类似的内置插件也是如此。有没有简单的方法来解决它? (由于占用空间,将生成器表达式转换为元组或列表并不是真正的选择。)
【问题讨论】:
-
您的第一个示例在 2.7.6 中对我来说效果很好 - 您使用的是什么版本?
-
确保你使用的是内置的
all(),而不是你自己命名为all的函数。 -
无法复制。你确定你没有命名函数
all或者忘记在 genexp 之前写all吗? -
您是否碰巧在脚本顶部写了
from numpy import *?numpy有一个numpy.all函数,它不像内置的all那样工作。这是不使用import *的原因之一。 -
如何在评论中接受答案?我相信 user2357112 已经回答了我的问题。我没有
import *,但我使用的 WinPython 可能已经为我导入了它。谢谢。
标签: python iterable generator-expression