2016-08-02 20 views
-5

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?

+0

Lesen Sie dazu: http://stackoverflow.com/questions/3289601/null-object-in-python –

+0

@ Ralf17 diesem Thread nicht meine Frage beantworten. – Aaron

+0

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. –

Antwort

0

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 
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 NoneFalse 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.

3

Python Documentation

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.

1

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.

0

[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')