【问题标题】:'True' and 'False' in PythonPython中的“真”和“假”
【发布时间】:2011-07-04 10:22:04
【问题描述】:

我尝试运行这段代码:

path = '/bla/bla/bla'

if path is True:
    print "True"
else:
    print "False"

它会打印 False。我认为 Python 将任何有价值的东西都视为 True。为什么会这样?

【问题讨论】:

    标签: python boolean


    【解决方案1】:

    虽然其他发帖人解释了为什么 is True 会这样做,但我想回复您帖子的这一部分:

    我认为 Python 将任何有价值的东西都视为 True。为什么会这样?

    来自 Java,我也被这个绊倒了。 Python 不会将任何值视为True。证人:

    if 0:
        print("Won't get here")
    

    这不会打印任何内容,因为 0 被视为 False。事实上,任何数字类型的零都等于False。他们还让decimal 按您期望的方式工作:

    from decimal import *
    from fractions import *
    
    if 0 or 0.0 or 0j or Decimal(0) or Fraction(0, 1):
        print("Won't get here")
    

    这是另一个评估为 False 的值:

    if None or False or '' or () or [] or {} or set() or range(0):
        print("Won't get here")
    

    来源:

    1. Python Truth Value Testing is Awesome
    2. Truth Value Testing(在内置类型中)

    【讨论】:

      【解决方案2】:

      来自6.11. Boolean operations

      在布尔运算的上下文中,以及当控制流语句使用表达式时,以下值被解释为假:假、无、所有类型的数字零以及空字符串和容器(包括字符串、元组、列表、字典、集合和冻结集合)。所有其他值都被解释为 true。

      我认为您误解的关键短语是“解释为假”或“解释为真”。这并不意味着这些值中的任何一个都等于 True 或 False,甚至等于 True 或 False。

      表达式 '/bla/bla/bla' 将在需要布尔表达式的情况下被视为 true(如在 if 语句中),但表达式 '/bla/bla/bla' is True'/bla/bla/bla' == True 将评估为 False,原因在 Ignacio 的回答中。

      【讨论】:

      • +1 我认为这是潜在的误解。也许知道有一个bool 函数将值“解释”为布尔值会有所帮助。你可以说这个函数在每个 if 中被隐式调用(这在技术意义上可能不是真的,但至少添加它不会改变 if 语句的行为)。
      【解决方案3】:

      is 比较身份。字符串永远不会与非字符串相同。

      == 是平等的。但是字符串永远不会等于TrueFalse

      你都不想要。

      path = '/bla/bla/bla'
      
      if path:
          print "True"
      else:
          print "False"
      

      【讨论】:

        猜你喜欢
        • 2014-10-18
        • 2014-09-07
        • 2015-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-28
        • 2020-09-09
        相关资源
        最近更新 更多