我在使用python的“全部”和生成器时遇到以下问题:
G = (a for a in [0,1])
all(list(G)) # returns False - as I expected
但:
G = (a for a in [0,1])
all(G) # returns True!
有人可以解释吗?
更新:
我发誓我明白了!看一下这个:
In [1]: G = (a for a in [0,1])
In [2]: all(G)
Out[2]: True
我正在将Python 2.6.6与IPython 0.10.2一起使用,所有这些都安装在Python(x,y)包中。奇怪的是,当我使用Spider IDE时,我得到了“True”(上图),而在纯控制台中得到了“False”。
更新2:
正如DSM所指出的那样,这似乎是一个 NumPy 的问题。 Python(x,y)加载numpy,而all(G)实际上是在调用numpy.all(G),而不是内置的all()。一个快速的解决方法是编写:
__builtins__.all(G)
谢谢大家的帮助!
-maciej
最佳答案
啊哈!
Python(x,y)碰巧会导入numpy吗? [看起来像。]
Python 2.7.2 (v2.7.2:8527427914a2, Jun 11 2011, 15:22:34)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>
>>> G = (a for a in [0,1])
>>> all(G)
False
>>> from numpy import all
>>>
>>> G = (a for a in [0,1])
>>> all(G)
True
>>>
这是Robert Kern的解释:
关于带有生成器的Python内置 "all",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7491951/