Ich habe Probleme beim Verständnis dieserWarum gibt 'wenn nicht keine' True zurück?
Ich habe versucht:
if not None:
print('True')
Warum es wahr druckt? Soll der None
Typ nicht None
sein?
Ich habe Probleme beim Verständnis dieserWarum gibt 'wenn nicht keine' True zurück?
Ich habe versucht:
if not None:
print('True')
Warum es wahr druckt? Soll der None
Typ nicht None
sein?
In Python None
ist ein Singleton. Es heißt null
in anderen Sprachen.
In Ihrem if not None:
nimmt der Compiler an, dass nicht None bedeutet, nicht leer oder nicht null, und wir wissen, eine If-Anweisung wertet Werte ungleich Null als True
aus und führt sie aus.
Funktion Beispiele:
1) if not None:
Drucke Argument x im Test()
def test(x):
if not None:
print(x)
>>> test(2)
2
2) if 1:
Drucke Argument x im Test()
def test(x):
if 1:
print(x)
>>> test(2)
2
3) if -1:
Drucke Argument x in test()
def test(x):
if -1:
print(x)
>>> test(2)
2
4) if 0:
nicht druckt Argument x in Test()
def test(x):
if 0:
print(x)
>>> test(2)
5) if True:
druckt Argument x in Test()
def test(x):
if True:
print(x)
>>> test(2)
2
Alle Python-Objekte haben einen Wahrheitswert, siehe Truth Value Testing. Das schließt None
ein, was als false in einem booleschen Kontext angesehen wird.
Darüber hinaus ist die not
Betreiber muss immer erzeugen ein logisches Ergebnis, entweder True
oder False
. Wenn stattdessen not None
False
produziert wird, wäre das schon überraschend, wenn bool(None)
bereits False
produziert.
Der None
Wert ist ein Sentinel Objekt, ein Signalwert. Sie müssen immer noch in der Lage sein, auf dieses Objekt zu testen, und es ist sehr hilfreich, dass es einen booleschen Wert hat. Nehmen Sie zum Beispiel:
if function_that_returns_value_or_None():
Wenn None
keinen Booleschen Wert haben würde, würde dieser Test durchbrechen.
4,1. Wahrheitswert-Test
Jedes Objekt kann auf Wahrheitswert getestet werden, um es in einer if- oder while-Bedingung oder als Operand der folgenden booleschen Operationen zu verwenden. Folgende Werte werden als falsch:
Keine
Falsch
Null jeder numerischen Typ, beispielsweise 0, 0.0, 0j.
eine leere Sequenz, zum Beispiel '',(), [].
Alle leeren Zuordnungen, z. B. {}.
Instanzen von benutzerdefinierten Klassen, ob die Klasse eines bool() oder definiert len () Methode, wenn diese Methode gibt den ganze Zahl Null oder bool Wert FALSE.
Jeder Wert hat eine Eigenschaft als "Truthiness" bekannt. Die "Wahrhaftigkeit" von None
ist False
. Dies ist aus mehreren Gründen der Fall, z. B. sauberer Code, wenn Sie einen Rückgabewert von None
als Fehler oder False
betrachten.
"Leere" Objekte wie ''
, []
, oder {}
werden alle als falsch bewertet. Beachten Sie, dass Objekte wie 'None'
(die Zeichenfolge) oder '0'
nicht enthalten sind.
Also if not None
konvertiert None
zu False
.
"Wahrhaftigkeit" ist auch bekannt als "Booleaness", die in einigen Kontexten formeller ist.
[Irony-Modus]
Wenn Sie nicht zufrieden sind True
Drucken Sie können es False
machen drucken:
if not None:
print('False')
Jetzt druckt es falsch :)
EDIT: Wenn Sie sind besorgt darüber, warum es nicht None
anstelle von True
oder False
(oder Apples
) drucken Sie können es einfach machen pri nt None
:
if not None:
print('None')
Lesen Sie dazu: http://stackoverflow.com/questions/3289601/null-object-in-python –
@ Ralf17 diesem Thread nicht meine Frage beantworten. – Aaron
Ich stelle mir vor, dass Sie aus verschiedenen Gründen abstimmen. 1) Es scheint nicht, dass Sie eine einfache Google-Suche auf Ihre Frage gemacht haben, um die Python-Dokumentation zu finden, die sehr klar besagt, dass 'None' als' False' gewertet wird. 2) Korrekturlesen. "Warum stimmt es?" ist ziemlich schlampig Grammatik. –