我对python的"all"和生成器有以下问题:
G = (a for a in [0,1])
all(list(G)) # returns False - as I expected
Run Code Online (Sandbox Code Playgroud)
但:
G = (a for a in [0,1])
all(G) # returns True!
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释一下吗?
更新:我发誓我明白了!看一下这个:
In [1]: G = (a for a in [0,1])
In [2]: all(G)
Out[2]: True
Run Code Online (Sandbox Code Playgroud)
我使用Python 2.6.6和IPython 0.10.2,都安装在Python(x,y)包中.奇怪的是,当我使用Spider IDE时,我得到"True"(上图),而在纯控制台中,我得到"False"......
更新2:正如帝斯曼指出的那样,这似乎是一个尴尬的问题.Python(x,y)加载numpy,所有(G)实际上调用numpy.all(G)而不是内置all().一个快速的解决方法是写:
__builtins__.all(G)
Run Code Online (Sandbox Code Playgroud)
感谢大家的帮助!
-maciej