我尝试运行这段代码:
path = '/bla/bla/bla'
if path is True:
print "True"
else:
print "False"
打印错误。我认为Python将任何有价值的东西视为 True 。为什么会这样?
答案 0 :(得分:98)
is
比较身份。字符串永远不会与非字符串相同。
==
是平等的。但字符串永远不会等于True
或False
。
你们两个都不想。
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")
来源: