質問

私は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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top