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.


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.


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


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


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 :)



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ą

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.