Operatory logiczne Pythona: and, or, and not (logiczna koniunkcja, dysjunkcja, negacja)

Biznes

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,notPierwszeństwo operatora

Ponadto, następujące punkty są wyjaśnione jako przestrogi.

  • Operatory logiczne dla obiektów typu innego niż bool
  • and,orTe 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.

  1. not
  2. and
  3. 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.

xyx and yx or y
truefalseyx
falsetruexy
truetrueyx
falsefalsexy

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,orZauważ, ż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