2009-09-21 7 views

Odpowiedz

18

Każdy obiekt może być testowany na prawdę wartości, do wykorzystania w razie lub podczas warunku lub jako argumentu Boolean operacji poniżej. Poniższe wartości są uważane za fałszywe:

  • Brak

  • Fałsz

  • zerowy dowolnego typu liczbowego, na przykład, 0, 0L, 0.0, 0j.

  • dowolna pusta sekwencja, na przykład '', (), [].

  • każde puste odwzorowanie, na przykład {}.

  • instancje klasy użytkownika, gdy klasa definiuje __nonzero__() lub __len__() sposób, w przypadku gdy sposób powraca liczbę całkowitą zero lub bool wartość False.

Wszystkie inne wartości są uważane za prawdziwe - więc obiekty wielu typów są zawsze prawdziwe. Operacje i funkcje wbudowane, które mają wynik typu Boolean, zawsze zwracają 0 lub False dla wartości false i 1 lub True dla wartości true, chyba że podano inaczej. (Ważny wyjątek: operacje logiczne "lub" i "i" zawsze zwracają jeden z ich argumentów.)

https://docs.python.org/2/library/stdtypes.html#truth-value-testing

I jak wspomniano, można zastąpić z niestandardowych obiektów modyfikując niezerowe.

+5

prostu trzeba pamiętać, że w Pythonie 3.0 '__bool__' musi zostać zastąpiona zamiast – Casebash

+7

docs cytujesz są nieprecyzyjne (lub niekompletne); na przykład zestawy nie są ani sekwencjami, ani odwzorowaniami, ale gdy są puste, są również fałszywe. Zrzuciłbym te dwie linie (obejmujące również przypadek zestawów) do "dowolnego pustego ** kontenera **". –

8

Aktualizacja: Usunięto wszystkie duplikaty infomation z Meder poście

Dla obiektów niestandardowych w Pythonie < 3.0 __nonzero__ aby zmienić sposób oceny ed. W Pythonie 3.0 jest to __bool__ (Reference przez e-satis)

Ważne jest, aby zrozumieć, co rozumie się przez ocenę. Jednym z nich jest, gdy obiekt jest jawnie rzutowany na bool lub niejawnie rzutowany przez jego położenie (w pętli if lub while).

Innym jest == ewaluacja. 1 == Prawda, 0 == Fałsz, nic innego nie jest równe poprzez ==.

>>> None==False 
False 
>>> 1==True 
True 
>>> 0==False 
True 
>>> 2==False 
False 
>>> 2==True 
False 

Wreszcie, ponieważ jest, tylko Prawda czy Fałsz są same w sobie.

+0

niestandardowe obiekty mogą powrócić Prawda/Fałsz oceny logicznej poprzez wdrożenie __nonzero__ – dcrosta