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
,not
Precedența operatorului
În plus, următoarele puncte sunt explicate ca avertismente.
- Operatori logici pentru obiecte de alt tip decât bool
and
,or
Aceste 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.
not
and
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.
x | y | x and y | x or y |
---|---|---|---|
true | false | y | x |
false | true | x | y |
true | true | y | x |
false | false | x | y |
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
,or
Reț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