このコードを実行してみました:
path = '/bla/bla/bla'
if path is True:
print "True"
else:
print "False"
そして、Falseと表示されます。 Pythonは値を持つものをTrueとして扱うと思った。なぜこうなった?
http://docs.python.org/reference/expressions.html#boolean-operations から:
ブール演算のコンテキストで、また式が制御フローステートメントで使用される場合、次の値はfalseとして解釈されます:False、None、すべてのタイプの数値ゼロ、および空の文字列とコンテナー(文字列、タプル、リスト、辞書を含む) 、sets、frozensets)。他のすべての値はtrueとして解釈されます。
ここであなたが誤解していると思う重要な言い回しは、「偽として解釈される」または「真として解釈される」です。これは、これらの値のいずれかがTrueまたはFalseと同一であること、またはTrueまたはFalseと等しいことさえ意味しません。
式'/bla/bla/bla'
は(if
ステートメントのように)ブール式が予想される場合はtrueとして扱われますが、式'/bla/bla/bla' is True
および'/bla/bla/bla' == True
はfalseに評価されますイグナシオの答えの理由。
is
はIDを比較します。文字列が非文字列と同一になることはありません。
==
は平等です。ただし、文字列がTrue
またはFalse
に等しくなることはありません。
あなたはどちらも欲しくない。
path = '/bla/bla/bla'
if path:
print "True"
else:
print "False"
他のポスターは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")
ソース: