[英]'True' and 'False' in Python
我嘗試運行這段代碼:
path = '/bla/bla/bla'
if path is True:
print "True"
else:
print "False"
它打印錯誤 。 我認為Python將任何有價值的東西視為真 。 為什么會這樣?
is
比較認同。 字符串永遠不會與非字符串相同。
==
是平等。 但是字符串永遠不會等於True
或False
。
你也不想要。
path = '/bla/bla/bla'
if path:
print "True"
else:
print "False"
來自http://docs.python.org/reference/expressions.html#boolean-operations :
在布爾運算的上下文中,以及控制流語句使用表達式時,以下值被解釋為false:False,None,所有類型的數字零,以及空字符串和容器(包括字符串,元組,列表,字典) ,集和frozensets)。 所有其他值都被解釋為true。
我覺得你誤解的關鍵措辭是“解釋為假”或“解釋為真”。 這並不意味着這些值中的任何一個都與True或False相同,甚至不等於True或False。
表達式'/bla/bla/bla'
將被視為true,其中布爾表達式是預期的(如在if
語句中),但表達式'/bla/bla/bla' is True
且'/bla/bla/bla' == True
將在Ignacio的答案中評估為False。
雖然其他海報解釋了為什么is True
會做它的作用,但我想回復你帖子的這一部分:
我認為Python將任何有價值的東西視為真。 為什么會這樣?
來自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")
資料來源:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.