どちらも評価します False
しかし、それはそれらが同じものであるという意味ではありません。
None
個別の値であり、独自のタイプがあります。空の文字列は、内容のない文字列です:
>>> type(None)
<type 'NoneType'>
>>> type('')
<type 'str'>
>>> bool(None) == bool('')
True
>>> None == ''
False
質問
私はPythonとコーディングに比較的新しいです。 「なし」に出くわすまで、私は元気にやっています:
variable = None
while variable != "":
print("Why does this loop start?")
簡単に思えますが、上記のループが始まる理由を把握できません。どうですか None
空の文字列と違う?彼らは両方とも虚偽に評価したと思いました。
解決
どちらも評価します False
しかし、それはそれらが同じものであるという意味ではありません。
None
個別の値であり、独自のタイプがあります。空の文字列は、内容のない文字列です:
>>> type(None)
<type 'NoneType'>
>>> type('')
<type 'str'>
>>> bool(None) == bool('')
True
>>> None == ''
False
他のヒント
いいえ、 None
同じものと同じです None
自体。空の文字列は同じものではありません:
>>> None == ""
False
None
特別なシングルトン値(Pythonセッションには1つのコピーのみがあります)、または「空の空ネス」または「適切な」値の欠如を意味します。そのように、それはです 国旗 また 信号 価値; Pythonは、たとえば、プロセスが何も返さないことを示すために、慣習によりそれを使用します。
両方 None
そして、空の文字列は、ブールのコンテキストでfalseと見なされます。
>>> bool(None)
False
>>> bool("")
False
すべての空の容器(空のタプル、リスト、セットなど)と数値0(整数、浮動小数点、または複雑な数字など)。ただし、偽と見なされることは、それらを平等にしません。
テストしたい場合 どれか 偽りの値、使用:
while not variable:
なので not
ブールのコンテキストでオペランドを解釈し、逆値を返します。
>>> not ""
True
>>> not None
True
>>> not "not empty"
False
どちらもFALSEと評価しますが、比較で使用すると異なります
if not None:
print "Always true"
if not "":
print "Always true"
if bool(None) == bool(""):
print "Always true"
if None == "":
pass
#always false