Frage

Ich bin relativ neu in Python und Codierung. Ich habe es gut gemacht, bis ich auf "None" gestoßen bin:

variable = None                          
while variable != "":                    
    print("Why does this loop start?")

Obwohl es einfach erscheint, kann ich nicht verstehen, warum die obige Schleife beginnt. Wie ist None anders als eine leere Zeichenfolge? Ich dachte, sie bewerteten beide auf False.

War es hilfreich?

Lösung

Beide bewerten auf False Aber das bedeutet nicht, dass sie dasselbe sind.

None ist ein separater Wert und hat seinen eigenen Typ. Eine leere Zeichenfolge ist eine Zeichenfolge ohne Inhalt:

>>> type(None)
<type 'NoneType'>
>>> type('')
<type 'str'>
>>> bool(None) == bool('')
True
>>> None == ''
False

Andere Tipps

Nein, None ist nur das Gleiche wie None selbst. Leere Saiten sind nicht dasselbe:

>>> None == ""
False

None ist ein spezieller Singleton -Wert (es gibt nur eine Kopie davon in einer Python -Sitzung), die "leeren" oder das Fehlen eines ordnungsgemäßen Werts bedeutet. Als solches ist es a Flagge oder Signal Wert; Python verwendet es durch die Konvention, um zu signalisieren, dass ein Prozess beispielsweise nichts zurückgab.

Beide None und die leere Zeichenfolge werden in einem booleschen Kontext als falsch angesehen:

>>> bool(None)
False
>>> bool("")
False

Wie alle leeren Behälter (wie ein leeres Tupel, eine Liste oder ein Set) und numerisch 0 (sei es integer, schwimmender Punkt oder eine komplexe Zahl). Als falsch angesehen zu sein, macht sie jedoch nicht gleich.

Wenn Sie testen wollten irgendein Wert, der falsch ist, verwenden Sie:

while not variable:

wie not interpretiert den Operanden in einem booleschen Kontext und gibt den inversen Wert zurück:

>>> not ""
True
>>> not None
True
>>> not "not empty"
False

Beide bewerten auf False, unterscheiden sich jedoch unterscheiden, wenn sie in einem Vergleich verwendet werden

if not None:
    print "Always true"
if not "":
    print "Always true"
if bool(None) == bool(""):
    print "Always true"
if None == "":
    pass
    #always false
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top