【问题标题】:Why does Python's `any` function not return True or False? [closed]为什么 Python 的 `any` 函数不返回 True 或 False? [关闭]
【发布时间】:2017-01-14 07:53:41
【问题描述】:

如果我尝试

>>> from pylab import *
>>> b = [2, 3, 4, 5, 6, 7]
>>> a = any(x < 0 for x in b)  
>>> print(a)

它不会返回 TrueFalse

返回

<generator object <genexpr> at 0x7fbd62129ab0>

【问题讨论】:

  • 请阅读how to ask
  • 这是你的全部代码吗?按原样,它确实会产生这个输出。
  • 两百个 quatloos 表示您正在使用 numpy.any,而不是 Python 的 anynumpy.any 不能很好地与生成器配合使用。
  • 在 python 3.5 和 2.7 上,您的代码打印 False。但如果我使用numpy.any,它会给出你的输出。使用a = __builtins__.any(x&lt;0 for x in b)。这就是当您import * 时发生的情况。
  • 我已将图像编辑到问题中。请直接复制粘贴终端输出,以后不要给出图片链接。

标签: python python-3.x numpy any


【解决方案1】:

您使用的是numpy.any(),而不是内置的any()。很可能您有 from numpy import anyfrom numpy import *,这会导致此行为。

为什么会这样?

根据documentationany 测试是否有任何元素评估条件。但是,如果您查看source code,它实际上返回了asanarray() 结果,即generator

如何避免?

只导入scope而不是方法本身总是一个好主意,就像这样:import numpy as np

:)

更新 1

就我个人而言,我从未使用过iPython,但感谢@Praveen 和@hpaulj 的cmets,如果您将--pylab 标志与ipython 一起使用,您将看到相同的行为,您可以关闭该行为- 从来不知道! :)))

【讨论】:

  • 这是一个很好的例子,为什么 Style Guide for Python Code 说:“应该避免通配符导入 (from &lt;module&gt; import *),因为它们使命名空间中存在哪些名称变得不清楚,从而混淆了读者和许多自动化工具。”
  • 是的 - 在编辑答案后看到您的评论 :)))
  • 如果您以 ipython --pylab 的身份启动 python,您也可能会遇到此问题,因为许多科学编程教程会指导您这样做。
  • @Praveen - 我不知道,只是检查了:) 我猜所有的模块都是自动导入的。我想知道它是否会导致内置函数出现任何问题/冲突。
  • 可以使用 --pylab 关闭 * 导入 - 但它需要在设置中使用标志(或命令行中的选项)。
【解决方案2】:

它返回错误

 >> 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 2013-09-18
    • 1970-01-01
    • 2021-03-21
    相关资源
    最近更新 更多