Gibt es einen Unterschied zwischen diesen drei in einem bestimmten Szenario?
Der erste fragt, ob die Variable etwas Falsches ist. Dieser Test wird für alle Arten von Dingen scheitern neben None
-False
, 0
, jede leere Sequenz usw.
Die zweite Frage, ob es die Magie Singleton konstant None
ist. Dies wird nur für None
selbst fehlschlagen.
Die dritte fragt, ob es sich um None
handelt. Dies wird zum Beispiel für Holder(None)
fehlschlagen, wobei Holder
eine Wrapper-Klasse ist, deren Instanzen gleich sind, was auch immer sie halten. Oder, um ein weniger realistisches aber kürzeres Code-Beispiel zu geben:
class Stupid(object):
def __ne__(self, other):
return False
Variable = Stupid()
Der letzte ist selten nützlich; in der Tat, wenn Sie jemals denken, dass Sie == None
oder != None
überprüfen müssen, und Sie nicht speziell transparente Wrapper-Klassen oder ähnliches erstellt haben, wollten Sie wahrscheinlich eigentlich is None
oder is not None
. Aber die anderen beiden sind beide sehr nützlich und üblich.
Wenn es keinen Unterschied gibt, welcher ist besser geeignet?
Nun, es ist ein Unterschied, und welches ist besser geeignet, hängt von der spezifischen Anwendung.
Am Ende der Frage scheint es, als ob Sie fragen könnten, ob es einen Unterschied in dem speziellen Fall gibt, in dem Variable
definitiv None
ist. In diesem Fall gibt es natürlich keinen funktionalen Unterschied zwischen den dreien. Alle sind garantiert falsch und tun daher nichts. Das bedeutet, dass es auch keinen Unterschied zwischen den dreien gibt und überhaupt keinen Code schreibt. Das ist viel einfacher, lesbarer und schneller.
* Es gibt einen Leistungsunterschied-der erste muss nicht LOAD_CONST
der None
, oder rufen Sie einen Vergleichsoperator. Und selbst wenn es Ihnen irgendwie gelungen ist, None
zu binden oder den Wert der None
Konstante zu ändern (vielleicht indem Sie den gesamten Heap mit ctypes
stampfen?), Funktioniert die erste wahrscheinlich noch. Aber beides wird niemals eine Rolle spielen - und wenn sie es wieder tun, wird kein Code noch schneller und zuverlässiger sein.
Vielleicht verwechselt er 'wenn x None' und' wenn x == None' – jamylak
ja, Recht. Danke für die Erinnerung –
Dies sollte geschlossen werden, es ist entweder keine echte Frage oder ein Duplikat. http: // Stapelüberlauf.com/questions/3257919/is-none-vs-none http://stackoverflow.com/questions/7816363/if-a-vs-if-a-is-not-none – jamylak