Właśnie dowiedziałem się, że w Pythonie istnieją wartości Truthy i Falsy, które różnią się od normalnych True
i False
?
Czy ktoś może szczegółowo wyjaśnić, jakie są prawdziwe i fałszywe wartości?
Gdzie mam ich używać?
Jaka jest różnica między prawdą a True
wartościami i fałszem a False
wartościami?
bool(value)
wynikiTrue
,value
to prawda .__nonzero__
i__bool__
Odpowiedzi:
Jak opisano w komentarzach, odnosi się tylko do wartości, które są oceniane jako Prawda lub Fałsz.
Na przykład, aby sprawdzić, czy lista nie jest pusta, zamiast sprawdzać w ten sposób:
Możesz to po prostu zrobić:
Dzieje się tak, ponieważ niektóre wartości, takie jak puste listy, są uznawane za fałszywe, gdy są oceniane pod kątem wartości logicznej. Niepuste listy są prawdziwe.
Podobnie dla liczby całkowitej 0, pusty łańcuch „” i tak dalej, w przypadku wartości False i niezerowych liczb całkowitych, niepustych łańcuchów itd., W przypadku wartości True.
Pojęcia takie jak „prawda” i „fałsz” odnoszą się po prostu do tych wartości, które są uważane za prawdziwe w przypadkach takich jak te opisane powyżej, oraz te, które są uważane za fałszywe.
Na przykład pusta lista (
[]
) jest uważana za „fałszywą”, a niepusta lista (na przykład[1]
) jest uważana za „prawdziwą”.Zobacz także tę sekcję dokumentacji .
źródło
if my_list
oznacza „jeśli moja_lista nie jest pusta”, aif not my_list
oznacza „jeśli moja_lista jest pusta”.if a:
co oznacza ten typ warunków? czy to znaczy, czy a jest prawdziwe, czy oznacza, że a jest fałszywe? czy to znaczy, czy a jest prawdą, czy też jest fałszem?if []:
nigdy by nie wykonał.Wszystkie wartości są uważane za „prawdziwe” z wyjątkiem następujących, które są „fałszywe”:
None
False
0
0.0
0j
Decimal(0)
Fraction(0, 1)
[]
- pustylist
{}
- pustydict
()
- pustytuple
''
- pustystr
b''
- pustybytes
set()
- pustyset
range
, jakrange(0)
obj.__bool__()
zwrotyFalse
obj.__len__()
zwroty0
Wartość „prawdziwa” spełni sprawdzenie przeprowadzane przez instrukcje
if
lubwhile
. Używamy „prawda” i „fałsz”, aby odróżnićbool
wartościTrue
iFalse
.Testowanie wartości prawdy
źródło
__bool__
najpierw szuka__len__
. Jeśli żadne z nich nie jest zdefiniowane, wszystkie wystąpienia są uznawane za „prawdziwe”. Jest to omówione w dokumentacjiobject.__bool__
metodytimedelta(0)
zera. Zostało to podniesione, gdy odkryto, że wartości czasu reprezentujące północ są fałszywe, co ostatecznie zostało naprawione: lwn.net/Articles/590299Prawdziwe wartości odnoszą się do obiektów używanych w kontekście boolowskim, a nie do wartości logicznej, która zwraca prawdę lub fałsz.
źródło
Python określa prawdziwość, stosując
bool()
się do typu, który zwracaTrue
lubFalse
jest używany w wyrażeniu, takim jakif
lubwhile
.Oto przykład dla klasy niestandardowej
Vector2d
i jej instancji zwracającej się,False
gdy wielkość (długość wektora) wynosi 0, w przeciwnym razieTrue
.Uwaga: gdybyśmy nie zdefiniowali
__bool__
, zawsze zwracałby True, ponieważ instancje klasy zdefiniowanej przez użytkownika są domyślnie uważane za prawdziwe.Przykład z książki: „Biegła znajomość języka Python, jasne, zwięzłe i efektywne programowanie”
źródło
Gdzie należy używać wartości Prawda lub Falsy? Są to cukier syntaktyczny , więc zawsze możesz ich uniknąć, ale ich użycie może zwiększyć czytelność kodu i zwiększyć wydajność. Co więcej, znajdziesz je w wielu przykładach kodu, czy to w Pythonie, czy nie, ponieważ jest to uważane za dobrą praktykę.
Jak wspomniano w innych odpowiedziach, możesz ich używać w if testy i pętle while. Oto dwa inne przykłady w Pythonie 3 z wartościami domyślnymi połączonymi z
or
,s
będącymi zmienną łańcuchową. Będziesz także odnosić się do podobnych sytuacji.Bez prawdy
z prawdą jest bardziej zwięzłe:
W Pythonie 3.8 możemy skorzystać z wyrażenia przypisania
:=
bez prawdy
z prawdą jest też krótszy
lub nawet krócej,
Bez wyrażenia przypisania można to zrobić
ale nie krócej. Niektórzy ludzie uważają tę
s =...
linię za niezadowalającą, ponieważ odpowiadaniemniej jednak możesz stosować się do tego stylu kodowania, jeśli czujesz się z nim swobodnie.
źródło
Falsy oznacza coś pustego, jak pusta lista, krotka, jak każdy typ danych mający puste wartości lub Brak. Prawda oznacza: z wyjątkiem prawdy
źródło