【问题标题】:Why doesn't Python logic doesn't always evaluate to a bool? [duplicate]为什么 Python 逻辑并不总是评估为布尔值? [复制]
【发布时间】:2014-05-20 16:09:50
【问题描述】:

在 Python 中,我非常习惯于使用逻辑运算符 andor,并认为它们会简单地用左右值进行评估,然后用 TrueFalse 替换运行时。

我最近发现情况并非如此。考虑:

>>> False or 10
10

我看到了用例。在这里,如果您有一个返回值或 False 失败的函数,则上述允许您拥有默认的后备值。但是and:

>>> True and re.match("s", "s")
<_sre.SRE_Match object at 0x19f9098>

这让我感到困惑...似乎总是返回 and 评估的最后一个操作数,其中两个操作数都评估为 True,这很有意义,因为它是最后一个运行但我不明白为什么这比只有一个布尔值更好。

为什么python会这样做? 有没有我没有看到的用例? 在您知道自己想要一个布尔值的情况下,转换这些值是个好主意吗?例如:

>>> bool(True and re.match("s", "s"))
True

【问题讨论】:

  • 因为andor 运算符除了布尔逻辑之外还有其他用途。
  • 关于你的最后一个问题,我认为我曾经使用过bool,除了在解释器中检查某些不熟悉的类型是否为真。

标签: python python-2.7 logical-operators


【解决方案1】:

用 Python 文档的话来说:

这有时很有用,例如,如果 s 是一个应该 替换为默认值

Boolean operations文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    相关资源
    最近更新 更多