Co się tutaj dzieje to suplement Pythona z niejawna bool()
konstruktora po if
, ponieważ wszystko następuje if
powinien zostać rozwiązany być logiczna.W tym kontekście kod jest równoważne
if bool("poi"):
print "yes"
Według Pythonie bool(x)
konstruktor przyjmuje niczego i decyduje o truthiness na podstawie poniżej przypadkach
- Jeśli x jest liczbą całkowitą, Tylko
0
jest False
wszystko jest True
- Jeśli x jest zmiennoprzecinkowe, tylko
0.0
jest False
wszystko inne jest prawdą "
- Jeśli x jest listą, tylko
[]
jest False
wszystko jest True
- Jeśli x jest ustawiony/dict Tylko
{}
jest False
wszystko jest True
- Jeśli x jest krotka, tylko
()
jest False
wszystko jest True
- Jeśli x jest ciągiem znaków, tylko
“"
to False
wszystko inne to True
. Należy pamiętać, że bool(“False”)
powróci do True
Oto log przypadków I wymienionych powyżej
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 za powiązanie dokumentów – Germano
Wierzę, że Python zawsze przetestuje __len __() dowolnej klasy, która ma jedną, i rozważ wynik równy 0, aby obiekt oszacował wartość "false" w kontekście logicznym. Jest to bardzo podobne do nakładania tej samej reguły nawet na zdefiniowane przez użytkownika klasy (trzeba celowo zwrócić nieintuicyjną wartość z metody __len __() lub całkowicie ją pominąć, aby uniknąć podążania tą samą metodą rządzić jako wbudowane). –
Dla każdego czytającego powyższą odpowiedź: upewnij się, że faktycznie czytałeś dokument (albo powyższy link albo tutaj: http://docs.python.org/2/reference/datamodel.html#object.__nonzero__) –