Was hier geschieht, ist Python‘Ergänzung von impliziten bool()
Konstruktor nach dem if
, weil durch if
gefolgt alles sollte sein boolean gelöst werden.In diesem Zusammenhang ist der Code
if bool("poi"):
print "yes"
Nach Python bool(x)
Konstruktor etwas
gleichwertig akzeptiert und entscheidet die Truthiness unter Fälle
- basierend auf Wenn x ganze Zahl ist, nur
0
ist False
alles andere ist True
- Wenn x float ist, Nur
0.0
ist False
alles andere ist True`
- Wenn X ist Liste, nur
[]
ist False
alles andere True
- ist Wenn x/dict gesetzt ist, werden nur
{}
ist False
alles andere True
- ist Wenn x Tupel ist, nur
()
ist False
alles andere True
- ist Wenn x String ist, werden nur
“"
ist False
alles andere ist True
. Beachten Sie, dass bool(“False”)
zu True
Hier zurückkehren wird das Protokoll für die Fälle, die ich oben
aufgeführt
Python 3.4.3 (default, Feb 25 2015, 21:28:45)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> bool(0)
False
>>> bool(1)
True
>>> bool(-1)
True
>>> bool(0.0)
False
>>> bool(0.02)
True
>>> bool(-0.10)
True
>>> bool([])
False
>>> bool([1,2])
True
>>> bool(())
False
>>> bool(("Hello","World"))
True
>>> bool({})
False
>>> bool({1,2,3})
True
>>> bool({1:"One", 2:"Two"})
True
>>> bool("")
False
>>> bool("Hello")
True
>>> bool("False")
True
+1 für die Verknüpfung der Dokumente – Germano
Ich glaube, Python wird immer __len __() von jeder Klasse, die eins hat, testen, und ein Ergebnis von 0 betrachten, dass das Objekt in einem booleschen Kontext zu 'false' auswertet. Das ist ziemlich genau dasselbe, als würde man dieselbe Regel selbst für benutzerdefinierte Klassen erzwingen (man müsste absichtlich einen nicht intuitiven Wert aus der __len __() -Methode zurückgeben oder ganz weglassen, um zu vermeiden, demselben zu folgen Regel als Einbauten). –
Für jeden, der die obige Antwort liest: Stellen Sie sicher, dass Sie das Dokument tatsächlich lesen (entweder den obigen Link oder hier: http://docs.python.org/2/reference/datamodel.html#object.__nonzero__) –