Python udostępnia operatory logiczne do wykonywania operacji logicznych (Boolean).(and
,or
,not
)
Służy do opisania zależności pomiędzy wieloma warunkami w instrukcji if.
W tym rozdziale opisano następujące elementy.
- skrzyżowanie:
and
- logiczny dodatek:
or
- odmowa:
not
and
,or
,not
Pierwszeństwo operatora
Ponadto, następujące punkty są wyjaśnione jako przestrogi.
- Operatory logiczne dla obiektów typu innego niż bool
and
,or
Te zwracane wartości nie muszą być typu bool.- Zwarcie (ocena zwarcia)
skrzyżowanie: and
i zwraca iloczyn logiczny dwóch wartości.
print(True and True)
# True
print(True and False)
# False
print(False and True)
# False
print(False and False)
# False
W rzeczywistości jest on często używany nie dla true lub false, ale dla wyrażeń warunkowych używających operatorów porównania. Dla twojej informacji, operatory porównania są następujące.
<
>
a = 10
print(0 < a)
# True
print(a < 100)
# True
print(0 < a and a < 100)
# True
i mogą być konkatenowane w następujący sposób.
print(0 < a < 100)
# True
logiczny dodatek: or
lub zwraca logiczne OR tych dwóch wartości.
print(True or True)
# True
print(True or False)
# True
print(False or True)
# True
print(False or False)
# False
odmowa: not
not” zwraca negację wartości; true i false są odwracane.
print(not True)
# False
print(not False)
# True
and,or,notPierwszeństwo operatora
Kolejność pierwszeństwa tych operatorów logicznych jest następująca: not jest najwyższy.
not
and
or
W poniższym przykładowym kodzie, powyższe wyrażenie jest interpretowane tak, jakby było tym poniżej. Ponieważ nie ma problemu z dodatkowymi nawiasami, być może łatwiej będzie je wyraźnie opisać w przypadkach takich jak ten przykład.
print(True or True and False)
# True
print(True or (True and False))
# True
Jeśli chcesz operować lub przed i, użyj nawiasów().
print((True or True) and False)
# False
<
,>
Te operatory porównania mają nawet wyższy priorytet niż nie. Dlatego nawiasy nie są konieczne dla każdej operacji porównania, jak to miało miejsce w powyższym przykładzie.
print(0 < a and a < 100)
# True
Zobacz oficjalną dokumentację poniżej, aby uzyskać podsumowanie pierwszeństwa operatorów w Pythonie.
Operatory logiczne dla obiektów typu innego niż bool
Za pomocą tych operatorów logicznych jako wartości boolean są przetwarzane nie tylko typy bool (true, false), ale również liczby, łańcuchy, listy itd.
Następujące obiekty są uważane za fałszywe w operacjach logicznych Pythona.
- Stałe zdefiniowane jako fałszywe:
None
,false
- Zero w typach numerycznych:
0
,0
,0j
,Decimal(0)
,Fraction(0, 1)
- Pusty ciąg lub zbiór:
''
,()
,[]
,{}
,set()
,range(0)
Wszystkie inne wartości są uważane za prawdziwe.
Funkcja bool() może być użyta do uzyskania wartości boolean obiektu. Zauważ, że ciąg '0' lub 'False' jest uważany za prawdę.
print(bool(10))
# True
print(bool(0))
# False
print(bool(''))
# False
print(bool('0'))
# True
print(bool('False'))
# True
print(bool([]))
# False
print(bool([False]))
# True
Aby traktować '0' lub 'false' w łańcuchu jako fałsz, użyj distutils.util.strtobool().
and,orTe zwracane wartości nie muszą być typu bool.
Oto przykład obiektu innego niż typ bool, pokazujący wynik działania każdego z operatorów na wartości liczbowej.
x = 10 # True
y = 0 # False
print(x and y)
# 0
print(x or y)
# 10
print(not x)
# False
Jak widać na powyższym przykładzie, and i or w Pythonie nie zwracają true lub false typu bool, ale zwracają wartość po lewej lub prawej stronie w zależności od tego, czy jest to true czy false. Przykład jest numeryczny, ale to samo odnosi się do innych typów, takich jak łańcuchy i listy. Nawiasem mówiąc, not zwraca true lub false dla typu bool.
Definicje wartości zwracanych przez and i or są następujące.
The expression x and y first evaluates x; if x is false, its value is returned; otherwise, y is evaluated and the resulting value is returned.
The expression x or y first evaluates x; if x is true, its value is returned; otherwise, y is evaluated and the resulting value is returned.
6.11. Boolean operations — Expressions — Python 3.10.1 Documentation
Gdy wartości lewego i prawego wyrażenia są osobno true i false, wartości zwracane są łatwe do zrozumienia. Z drugiej strony, jeśli oba są prawdziwe lub oba są fałszywe, wartość zwracana będzie inna w zależności od kolejności.
Jeśli użyjesz go jako wyrażenia warunkowego w instrukcji if, etc., wynik jest oceniany jako wartość logiczna i przetwarzany, więc nie musisz się o to martwić, ale jeśli używasz wartości zwracanej do dalszego przetwarzania, musisz być ostrożny.
x = 10 # True
y = 100 # True
print(x and y)
# 100
print(y and x)
# 10
print(x or y)
# 10
print(y or x)
# 100
x = 0 # False
y = 0.0 # False
print(x and y)
# 0
print(y and x)
# 0.0
print(x or y)
# 0.0
print(y or x)
# 0
print(bool(x and y))
# False
Jeśli chcesz potraktować to jako true lub false, możesz to zrobić tak jak w ostatnim przykładzie.bool(x and y)
Wartości zwracane przez i oraz lub są podsumowane w poniższej tabeli.
x | y | x and y | x or y |
---|---|---|---|
true | false | y | x |
false | true | x | y |
true | true | y | x |
false | false | x | y |
Zwarcie (ocena zwarcia)
Jak widać z powyższej tabeli, jeśli x jest fałszywe w x i y, lub jeśli x jest prawdziwe w x lub y, wartością zwracaną będzie x niezależnie od wartości y.
W takim przypadku y nie jest obliczane.
and
,or
Zauważ, że jeśli wywołasz funkcję lub metodę po prawej stronie tych procesów, aby wykonać pewne przetwarzanie, proces może nie zostać wykonany w zależności od wyniku po lewej stronie.
def test():
print('function is called')
return True
print(True and test())
# function is called
# True
print(False and test())
# False
print(True or test())
# True
print(False or test())
# function is called
# True