Python中的'True'和'False'

时间:2011-02-25 16:23:33

标签: python boolean

我尝试运行这段代码:

path = '/bla/bla/bla'

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

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

3 个答案:

答案 0 :(得分:98)

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

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

你们两个都不想。

path = '/bla/bla/bla'

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

答案 1 :(得分:62)

来自http://docs.python.org/reference/expressions.html#boolean-operations

  
    

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

  

我觉得你误解的关键词是“被解释为假”或“被解释为真”。这并不意味着这些值中的任何一个都与True或False相同,甚至等于True或False。

在需要布尔表达式的情况下(如'/bla/bla/bla'语句中),表达式if将被视为true,但表达式'/bla/bla/bla' is True'/bla/bla/bla' == True将评估为因伊格纳西奥回答的原因是错误的。

答案 2 :(得分:3)

虽然其他张贴者谈到了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. https://medium.com/@dawran6/python-truth-value-testing-is-awesome-dae6c23cc1c2
  2. https://docs.python.org/3.7/library/stdtypes.html#truth-value-testing