2016-04-08 49 views

Antwort

3

Da == die Wahrheit nicht überprüft, überprüft es die Gleichheit. Diese zwei Objekte sind von verschiedenen Typen, also sind sie nicht gleich.

Wenn Sie die Truthiness eines Objekts explizit sehen wollen, wandeln es in Bool:

>>> bool([]) 
False 

Hinweis Sie würden dies nie in echten Code tun, weil der Punkt von Truthiness ist, dass die Umwandlung implict ist. Vielmehr würden Sie tun:

if my_value: 
    ...do something... 
+2

“nicht None und IST-Instanz nicht leer ist zwei Objekte sind von unterschiedlicher Art, also sind sie nicht gleich "Es ist jedoch etwas komplexer. Z.B. Wenn Sie mit 'def __eq __ (self, other) eine eigene Klasse deklarieren: Rückgabe True, dann sind Instanzen dieser Klasse gleich einem (?) anderen Objekt. –

+0

Also gilt 'if' Anweisung implizit diese Umwandlung in' bool' selbst? Wenn ja, warum wendet es nicht dieselbe Umwandlung in 'if [] == False an? Wenn man bedenkt, dass '[]' als 'False' interpretiert wird und' == 'auf Gleichheit der Werte prüft, sollte es nicht' True' zurückgeben? – chaudharyp

+0

'[]' wird ** absolut nicht ** als falsch interpretiert, das ist einfach nicht wahr. Es ist falsch in einem booleschen Kontext, das ist alles. –

-2

weil == kehrt Gleichheit, wenn das Objekt auf andere gleich ...

in diesem Fall [] ist nicht None nur ein leeres Array zB:

if variable: 
    print "true" 
else: 
    print "false" 

Wenn die Variable eine leere Zeichenfolge ('') oder ein leeres Array ([]) ist, wird false ausgegeben.

if variable == None: 
    print "true" 
else: 
    print "false" 

wenn variable leere Zeichenfolge ('') oder leeres Array ist ([]) diese druckt Fasle aus, weil ihr nicht Keine Typ (dessen Typ str oder Liste entspricht).

==: liefert TRUE, wenn 2 Variablen

wenn gleich sind: liefert TRUE, wenn Variable (wie leere Array oder String) solche

Verwandte Themen