Jak używać wartości logicznej w Pythonie?

109

Czy Python faktycznie zawiera wartość logiczną? Wiem, że potrafisz:

checker = 1
if checker:
    #dostuff

Ale jestem dość pedantyczny i lubię oglądać wartości logiczne w Javie. Na przykład:

Boolean checker;
if (someDecision)
{
    checker = true;
}
if(checker)
{
    //some stuff
}

Czy istnieje coś takiego jak Boolean w Pythonie? Nie mogę znaleźć czegoś podobnego w dokumentacji.

Federer
źródło
1
Pamiętaj ... nie musisz deklarować typów podczas tworzenia zmiennej. Wystarczy „checker = False”.
Dominic Bou-Samra
10
@Dominic Bou-Samra: "nie musisz deklarować typów"? To nie do końca prawda. Myślę, że powinieneś powiedzieć „prawdopodobnie nie możesz zadeklarować typu zmiennej”.
S.Lott,
2
@ S.Lott "nie możesz prawdopodobnie zadeklarować typu dla zmiennej" ... nadal nie jest to prawda, ponieważ możesz typecast some_var = int("1234")... ta linia wyraźnie ustawia some_var=>int
Kolob Canyon

Odpowiedzi:

142
checker = None 

if some_decision:
    checker = True

if checker:
    # some stuff

[Edytować]

Więcej informacji: http://docs.python.org/library/functions.html#bool

Twój kod też działa, ponieważ 1jest konwertowany na, Truegdy jest to konieczne. W rzeczywistości Python przez długi czas nie miał typu boolowskiego (jak w starym C), a niektórzy programiści nadal używają liczb całkowitych zamiast wartości logicznych.

Bastien Léonard
źródło
17
Zwykle prostsze jest użycie checker = (jakaś_decyzja) (np. Checker = (a <b)) zamiast „if”.
MAK
11
ten fragment kodu jest nieco mylący… nadal musisz zdefiniować „checker” przed jego przetestowaniem. Podczas gdy OP definiuje to wcześniej, w twoim przykładzie checker = None jest absolutnie konieczne, inaczej otrzymasz UnboundLocalError
dprogramz
Wartości logiczne Pythona są liczbami całkowitymi. Truei Falsesą odniesieniami do rozszerzonych intobiektów z nadpisanymi __str__i __repr__.
Mad Physicist
Wartości logiczne Pythona nie są liczbami całkowitymi; 1 is not True, ale 1 == True.
BallpointBen
@BallpointBen: są to liczby całkowite w powszechnym sensie instancji inttypu, jak pokazano na isinstance(True, int).
Bastien Léonard
93

Wbudowane wartości logiczne są pisane wielkimi literami: Truei False.

Zwróć też uwagę, że możesz zrobić checker = bool(some_decision)skrótowo - boolwróci tylko Truelub False.

Dobrze jest wiedzieć na przyszłość, że klasy definiujące __nonzero__lub__len__ będą Truealbo Falsezależne od wyniku tych funkcji, ale praktycznie każdy inny wynik boolowski będzie True(z wyjątkiem Noneobiektu, pustych sekwencji i zer numerycznych).

Mark Rushakoff
źródło
1
Bardzo dziękuję za wgląd. Ponieważ powszechne głosowanie przeszło na drugą odpowiedź, przyznałem Bastienowi „Zaakceptowaną odpowiedź”. Jednak Twój był najbardziej pomocny! :)
Federer
23
brawura: po co nie akceptować odpowiedzi, którą uważasz za najbardziej pomocną? To zupełnie nieistotne, jeśli inna odpowiedź jest bardziej przychylna.
tzot
2
Ta odpowiedź jest również powszechna. Rozważ zmianę swojego głosu.
Alastor Moody
12

True... i Falseoczywiście.

W przeciwnym razie zwraca Nonewartość False, podobnie jak liczbę całkowitą 0i zmiennoprzecinkową 0.0(chociaż nie używałbym takich liczb zmiennoprzecinkowych ). Poza tym puste listy [], puste krotki() i puste ciągi znaków ''lub ""wartości False.

Wypróbuj sam z funkcją bool() :

bool([])
bool(['a value'])
bool('')
bool('A string')
bool(True)  # ;-)
bool(False)
bool(0)
bool(None)
bool(0.0)
bool(1)

itp..

Terje Dahl
źródło
5

Typy logiczne są zdefiniowane w dokumentacji:
http://docs.python.org/library/stdtypes.html#boolean-values

Cytat z doc:

Wartości logiczne to dwa stałe obiekty False i True. Służą do reprezentowania wartości prawdy (chociaż inne wartości można również uznać za fałszywe lub prawdziwe). W kontekstach numerycznych (na przykład, gdy są używane jako argument operatora arytmetycznego), zachowują się jak odpowiednio liczby całkowite 0 i 1. Wbudowana funkcja bool () może służyć do rzutowania dowolnej wartości na wartość logiczną, jeśli wartość ta może być zinterpretowana jako wartość prawdy (zob. Powyżej „Testowanie wartości prawdy”).

Są zapisane odpowiednio jako Fałsz i Prawda.

Więc w kodzie java usuń nawiasy klamrowe, zmień truena Truei wszystko będzie dobrze :)

Anurag Uniyal
źródło
4

Tak, istnieje booltyp danych (który dziedziczy inti ma tylko dwie wartości: TrueiFalse ).

Ale także Python ma boolean-ablekoncepcję dla każdego obiektu, która jest używana, gdy funkcjabool([x]) wywoływana jest .

Zobacz więcej: obiekt. niezerowa i boolean-value-of-objects-in-Python .

awangarda
źródło
x = bool (0) # false && x = bool (1) # true
Julian
0

W przeciwieństwie do Javy, w której zadeklarowałbyś boolean flag = True , w Pythonie możesz po prostu zadeklarowaćmyFlag = True

Python zinterpretowałby to jako zmienną boolowską

koder
źródło