Van deze niet Geen-tests.
if val != None:
if not (val is None):
if val is not None:
Welke heeft de voorkeur en waarom?
Antwoord 1, autoriteit 100%
if val is not None:
# ...
is het Pythonische idioom om te testen of een variabele niet is ingesteld op None
. Dit idioom wordt vooral gebruikt in het geval van het declareren van trefwoordfuncties met standaardparameters. is
test identiteit in Python. Omdat er één en slechts één exemplaar van None
aanwezig is in een draaiend Python-script/programma, is is
hiervoor de optimale test. Zoals Johnsyweb aangeeft, wordt dit besproken in PEP 8onder “Programmeeraanbevelingen”.
Waarom dit de voorkeur heeft boven
if not (val is None):
# ...
dit is gewoon een onderdeel van de Zen van Python: “Leesbaarheid telt .” Goede Python komt vaak in de buurt van goede pseudocode.
Antwoord 2, autoriteit 11%
Van, Programmeeraanbevelingen, PEP 8:
Vergelijkingen met singletons zoals None moeten altijd worden gedaan met
is
ofis not
, nooit de gelijkheidsoperatoren.Pas ook op voor het schrijven van
if x
wanneer u echt bedoeltif x is not None
– b.v. Bij het testen of een variabele of argument waarvan geen enkele waarde is ingesteld op een andere waarde. De andere waarde kan een type (zoals een container) hebben die onjuist zou kunnen zijn in een Booleaanse context!
PEP 8 is essentieellezing voor elke Python-programmeur.
Antwoord 3, Autoriteit 3%
De beste gok met dit soort vragen is om precies te zien wat Python doet. dis
module is ongelooflijk informatief:
>>> import dis
>>> dis.dis("val != None")
1 0 LOAD_NAME 0 (val)
2 LOAD_CONST 0 (None)
4 COMPARE_OP 3 (!=)
6 RETURN_VALUE
>>> dis.dis("not (val is None)")
1 0 LOAD_NAME 0 (val)
2 LOAD_CONST 0 (None)
4 COMPARE_OP 9 (is not)
6 RETURN_VALUE
>>> dis.dis("val is not None")
1 0 LOAD_NAME 0 (val)
2 LOAD_CONST 0 (None)
4 COMPARE_OP 9 (is not)
6 RETURN_VALUE
Merk op dat de laatste twee zaken verkleinen tot dezelfde reeks bewerkingen, Python leest not (val is None)
en gebruikt de is not
operator . De eerste gebruikt de !=
operator bij vergelijking met None
.
Zoals aangegeven door andere antwoorden, is het een slecht idee om !=
te gebruiken bij het vergelijken met None
.
Antwoord 4, autoriteit 2%
Een van de laatste twee, aangezien val
mogelijk van een type kan zijn dat __eq__()
definieert om true te retourneren wanneer None
wordt doorgegeven.