为什么Python';s`any`函数不返回True或False?
如果我尝试为什么Python';s`any`函数不返回True或False?,python,python-3.x,numpy,any,Python,Python 3.x,Numpy,Any,如果我尝试 >>> from pylab import * >>> b = [2, 3, 4, 5, 6, 7] >>> a = any(x < 0 for x in b) >>> print(a) 它返回false >> b = [2,3,4,5,6,7] >>> b [2, 3, 4, 5, 6, 7] >>> a = any(x<0 for x
>>> from pylab import *
>>> b = [2, 3, 4, 5, 6, 7]
>>> a = any(x < 0 for x in b)
>>> print(a)
它返回false
>> b = [2,3,4,5,6,7]
>>> b
[2, 3, 4, 5, 6, 7]
>>> a = any(x<0 for x in b)
>>> a
False
>>> print(a)
False
>b=[2,3,4,5,6,7]
>>>b
[2, 3, 4, 5, 6, 7]
>>>a=任意(x>>a
假的
>>>印刷品(a)
假的
您使用的是numpy.any()
而不是内置的any()
。很可能是从numpy导入any
或从numpy导入*
,这导致了此行为
为什么会发生这种情况?
根据,any
测试是否有任何元素评估了条件。但是,如果您查看,它实际上会返回一个asanarray()
结果,这是一个生成器
如何避免它?
只导入scope
而不是方法本身总是一个好主意,就像这样:importnumpyasnp
:)
更新1
就我个人而言,我从未使用过iPython
,但多亏@Praveen和@hpaulj的评论,如果您将--pylab
标志与iPython
一起使用,您将看到相同的行为,并且您可以关闭该行为-从来都不知道!) 请阅读这是你所有的代码吗?实际上,它确实产生了这个输出。两百个quatloos表示您使用的是numpy.any
,而不是Python的any
<代码>numpy。任何
都不能很好地使用生成器。在Python3.5和2.7上,代码打印出False
。但是如果我使用numpy.any
它会给出你的输出。使用a=\uuuuu内置\uuuuuu.any(我已将图像编辑到问题中。请直接复制粘贴终端输出,而不是在将来提供指向图像的链接。这是一个很好的示例,说明了为什么“通配符导入(来自导入*
)应该避免,因为它们会使名称空间中出现的名称不清楚,从而混淆读者和许多自动化工具。“是的-编辑答案后看到了您的评论:)))如果您以ipython--pylab
的身份启动python,也可能会遇到此问题,许多科学编程教程都会指导您。@Praveen-我不知道,只是选中:)我想所有模块都是自动导入的。我想知道它是否会导致内置函数出现任何问题/冲突。可以使用--pylab
-关闭*
导入,但需要在设置中设置一个标志(或命令行中的选项)。
>> b = [2,3,4,5,6,7]
>>> b
[2, 3, 4, 5, 6, 7]
>>> a = any(x<0 for x in b)
>>> a
False
>>> print(a)
False