2013-08-28 16 views

Antwort

15

Python wird sein Bestes tun, um die „Truthiness“ eines Ausdrucks zu bewerten, wenn ein boolescher Wert von benötigt wird dieser Ausdruck.

Die Regel für Zeichenfolgen ist, dass eine leere Zeichenfolge als False gilt, eine nicht leere Zeichenfolge als True. Dieselbe Regel gilt für andere Container, so dass ein leeres Wörterbuch oder eine Liste als False gilt, ein Wörterbuch oder eine Liste mit einem oder mehreren Einträgen wird als True betrachtet.

Das Objekt None wird ebenfalls als falsch betrachtet.

Ein Zahlenwert von 0 gilt als falsch (obwohl ein Zeichenfolgenwert von '0' als wahr betrachtet wird). Alle anderen Ausdrücke werden als True betrachtet.

Details (einschließlich, wie benutzerdefinierte Typen Wahrheit angeben können) finden Sie hier: http://docs.python.org/release/2.5.2/lib/truth.html.

+0

+1 für die Verknüpfung der Dokumente – Germano

+0

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

+1

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__) –

8

In Python, eine beliebige Zeichenfolge außer einer leeren Zeichenfolge standardmäßig True

dh

if "MyString": 
    # this will print foo 
    print("foo") 

if "": 
    # this will NOT print foo 
    print("foo") 
+0

Gleiches gilt für die Liste und andere Datentypen, ist es nicht? – navyad

+0

"Standardwerte auf" True "" ist nicht wirklich korrekt. Wie wäre es mit "True" in einem booleschen Kontext "? –

+0

naveen yadav, ja, es gilt für alle integrierten Sammlungstypen. Leere Sammlungen sind False, nicht leere Sammlungen sind True. Eine Zeichenfolge ist eine Sequenz, bei der es sich um eine Art von Sammlung handelt. – Hammerite

5

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 
Verwandte Themen