2013-08-28 13 views
7
if <boolean> : 
    # do this 

wartość logiczna musi być równa albo prawda lub fałsz.Wartość prawdy ciągu znaków w pythoniu

dlaczego

if "poi": 
    print "yes" 

wyjściowa: tak

ja nie rozumiem, dlaczego tak jest w trakcie drukowania, ponieważ "poi" jest dolny Prawda czy fałsz.

Odpowiedz

15

Python dołoży wszelkich starań, aby ocenić „truthiness” wyrażenia, gdy wartość logiczna jest potrzebne z to wyrażenie.

Reguła dla ciągów jest taka, że ​​pusty ciąg jest uważany za False, niepusty ciąg jest uważany za True. Ta sama reguła jest nakładana na inne kontenery, więc pusty słownik lub lista jest uznawana za False, słownik lub lista z jedną lub większą liczbą pozycji jest uważana za True.

Obiekt None jest również uznawany za fałszywy.

Wartość liczbowa 0 jest uznawana za fałszywą (chociaż wartość ciągu '0' jest uznawana za prawdą).

Wszystkie inne wyrażenia są uważane za True.

Szczegóły (w tym sposób, w jaki typy zdefiniowane przez użytkownika mogą określać prawdomówność) można znaleźć tutaj: http://docs.python.org/release/2.5.2/lib/truth.html.

+0

+1 za powiązanie dokumentów – Germano

+0

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

+1

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

8

W Pythonie dowolny ciąg znaków z wyjątkiem pustych domyślnych strunowych do True

tj

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

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

samo odnosi się do listy i inne typy danych, prawda? – navyad

+0

"domyślne ustawienie" True "" nie jest prawidłowe. Co powiesz na "zwraca wartość" True "w kontekście logicznym"? –

+0

naveen yadav, tak, dotyczy to wszystkich wbudowanych typów kolekcji. Puste kolekcje są fałszywe, niepuste kolekcje są prawdziwe. Ciąg jest sekwencją, która jest typem kolekcji. – Hammerite

5

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 
Powiązane problemy