Operatorii logici Python and, or, și not (conjuncție logică, disjuncție, negație)

Afaceri

Python oferă operatori logici pentru a efectua operații logice (booleene).(and,or,not)
Se utilizează pentru a descrie relația dintre mai multe condiții într-o declarație if.

În această secțiune sunt descrise următoarele.

  • intersecție: and
  • adăugare logică: or
  • refuz: not
  • and,or,notPrecedența operatorului

În plus, următoarele puncte sunt explicate ca avertismente.

  • Operatori logici pentru obiecte de alt tip decât bool
  • and,orAceste valori de returnare nu sunt neapărat de tip bool.
  • Scurtcircuit (evaluarea scurtcircuitului)

intersecție: and

și returnează produsul logic a două valori.

print(True and True)
# True

print(True and False)
# False

print(False and True)
# False

print(False and False)
# False

De fapt, este adesea folosit nu pentru adevărat sau fals, ci pentru expresii condiționale care utilizează operatori de comparație. Pentru informarea dumneavoastră, operatorii de comparație sunt următorii.

  • <
  • >
a = 10
print(0 < a)
# True

print(a < 100)
# True

print(0 < a and a < 100)
# True

și pot fi concatenate după cum urmează.

print(0 < a < 100)
# True

adăugare logică: or

sau returnează OR logic al celor două valori.

print(True or True)
# True

print(True or False)
# True

print(False or True)
# True

print(False or False)
# False

refuz: not

not” returnează negația valorii; true și false sunt inversate.

print(not True)
# False

print(not False)
# True

and,or,notPrecedența operatorului

Ordinea de precedență a acestor operatori logici este următoarea: not este cel mai înalt.

  1. not
  2. and
  3. or

În următorul exemplu de cod, expresia de mai sus este interpretată ca și cum ar fi cea de mai jos. Deoarece nu există nicio problemă cu parantezele suplimentare, poate fi mai ușor să le descriem în mod clar în cazuri precum acest exemplu.

print(True or True and False)
# True

print(True or (True and False))
# True

Dacă doriți să operați sau înainte de și, utilizați paranteze().

print((True or True) and False)
# False

<,>Acești operatori de comparare au o precedență chiar mai mare decât în cazul în care nu sunt. Prin urmare, nu sunt necesare parantezele pentru fiecare operațiune de comparație, așa cum a fost cazul în exemplul de mai sus.

print(0 < a and a < 100)
# True

Consultați documentația oficială de mai jos pentru un rezumat al precedenței operatorilor în Python.

Operatori logici pentru obiecte de alt tip decât bool

Cu acești operatori logici, nu numai tipurile bool (true, false), ci și numerele, șirurile de caractere, listele etc. sunt procesate ca valori booleene.

Următoarele obiecte sunt considerate false în operațiile logice din Python.

  • Constante definite ca fiind false: None,false
  • Zero în tipurile numerice: 0,0,0j,Decimal(0),Fraction(0, 1)
  • Secvență sau colecție goală: '',(),[],{},set(),range(0)

Toate celelalte valori sunt considerate adevărate.

Funcția bool() poate fi utilizată pentru a obține valoarea booleană a unui obiect. Rețineți că șirul de caractere „0” sau „False” este considerat adevărat.

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

Pentru a trata „0” sau „false” dintr-un șir de caractere ca fiind false, utilizați distutils.util.strtobool().

and,orAceste valori de returnare nu sunt neapărat de tip bool.

Iată un exemplu de obiect de alt tip decât bool, care arată rezultatul fiecărui operator asupra unei valori numerice.

x = 10  # True
y = 0  # False

print(x and y)
# 0

print(x or y)
# 10

print(not x)
# False

După cum puteți vedea din exemplul de mai sus, și și sau în Python nu returnează true sau false de tip bool, ci returnează valoarea din stânga sau din dreapta, în funcție de faptul că este true sau false. Exemplul este numeric, dar același lucru se aplică și altor tipuri, cum ar fi șiruri și liste. De altfel, not returnează true sau false de tip bool.

Definițiile valorilor de retur ale lui și și or sunt următoarele.

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

Atunci când valorile expresiilor din stânga și din dreapta sunt true și false separat, valorile de returnare sunt ușor de înțeles. Pe de altă parte, dacă ambele sunt adevărate sau ambele sunt false, valoarea de returnare va fi diferită în funcție de ordine.

Dacă îl utilizați ca expresie condițională într-o declarație if etc., rezultatul este considerat ca o valoare booleană și este procesat, deci nu trebuie să vă faceți griji în această privință, dar dacă utilizați valoarea de returnare pentru o procesare ulterioară, trebuie să fiți atenți.

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

Dacă doriți să o tratați ca fiind adevărată sau falsă, o puteți face ca în ultimul exemplu.
bool(x and y)

Valorile de returnare ale funcțiilor și și sau sunt rezumate în tabelul de mai jos.

xyx and yx or y
truefalseyx
falsetruexy
truetrueyx
falsefalsexy

Scurtcircuit (evaluarea scurtcircuitului)

După cum puteți vedea în tabelul de mai sus, dacă x este fals în x și y, sau dacă x este adevărat în x sau y, valoarea de returnare va fi x, indiferent de valoarea lui y.

În acest caz, y nu este evaluat.

and,orRețineți că, dacă apelați o funcție sau o metodă din partea dreaptă a acestor procese pentru a efectua o anumită procesare, este posibil ca procesul să nu fie executat în funcție de rezultatul din partea stângă.

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
Copied title and URL