Pythonovi logički operatori and, or, and not (logička konjunkcija, disjunkcija, negacija)

Poslovanje

Python pruža logičke operatore za izvođenje logičkih (Booleovih) operacija.(and,or,not)
Koristi se za opisivanje odnosa između više uvjeta u if naredbi.

Ovaj odjeljak opisuje sljedeće.

  • križanje:and
  • logičan dodatak:or
  • poricanje:not
  • and,or,notPrioritet operatera

Osim toga, sljedeće točke su objašnjene kao upozorenja.

  • Logički operatori za objekte tipa koji nije bool
  • and,orOve povratne vrijednosti nisu nužno tipa bool.
  • Kratki spoj (procjena kratkog spoja)

križanje:and

i vraća logički proizvod dviju vrijednosti.

print(True and True)
# True

print(True and False)
# False

print(False and True)
# False

print(False and False)
# False

Zapravo, često se ne koristi za istinito ili netočno, već za uvjetne izraze koji koriste operatore za usporedbu. Za vašu informaciju, operatori usporedbe su sljedeći.

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

print(a < 100)
# True

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

a može se spojiti na sljedeći način.

print(0 < a < 100)
# True

logičan dodatak:or

ili vraća logičko ILI od dvije vrijednosti.

print(True or True)
# True

print(True or False)
# True

print(False or True)
# True

print(False or False)
# False

poricanje:not

not” vraća negaciju vrijednosti; true i false su obrnuti.

print(not True)
# False

print(not False)
# True

and,or,notPrioritet operatera

Redoslijed prioriteta ovih logičkih operatora je sljedeći: ne je najviši.

  1. not
  2. and
  3. or

U sljedećem uzorku koda, gornji izraz se tumači kao da je onaj ispod. Budući da nema problema s dodatnim zagradama, možda će ih biti lakše jasno opisati u slučajevima poput ovog primjera.

print(True or True and False)
# True

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

Ako želite raditi ili prije i, koristite zagrade().

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

<,>Ovi operatori usporedbe imaju čak i veći prioritet nego ne. Stoga zagrade nisu potrebne za svaku operaciju usporedbe, kao što je bio slučaj u gornjem primjeru.

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

Pogledajte službenu dokumentaciju u nastavku za sažetak prioriteta operatora u Pythonu.

Logički operatori za objekte tipa koji nije bool

With these logical operators, not only bool types (true, false), but also numbers, strings, lists, etc. are processed as boolean values.

Sljedeći objekti se smatraju lažnim u Pythonovim logičkim operacijama.

  • Konstante definirane kao lažne:None,false
  • Nula u brojčanim vrstama:0,0,0j,Decimal(0),Fraction(0, 1)
  • Prazna sekvenca ili zbirka:',(),[],{},set(),range(0)

Sve ostale vrijednosti smatraju se istinitima.

Funkcija bool() može se koristiti za dobivanje booleove vrijednosti objekta. Imajte na umu da se niz ‘0’ ili ‘False’ smatra istinitim.

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

Za rukovanje ‘0’ ili ‘false’ u nizu kao false, koristite distutils.util.strtobool().

and,orOve povratne vrijednosti nisu nužno tipa bool.

Ovdje je primjer objekta koji nije tip bool, koji prikazuje rezultat svakog operatora na numeričkoj vrijednosti.

x = 10  # True
y = 0  # False

print(x and y)
# 0

print(x or y)
# 10

print(not x)
# False

Kao što možete vidjeti iz gornjeg primjera, i i ili u Pythonu ne vraćaju true ili false tipa bool, već vraćaju vrijednost s lijeve ili desne strane ovisno o tome je li istinita ili lažna. Primjer je numerički, ali isto vrijedi i za druge vrste kao što su nizovi i popisi. Usput, not vraća true ili false tipa bool.

Definicije povratnih vrijednosti i i ili su sljedeće.

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

Kada su vrijednosti lijevog i desnog izraza odvojeno istinite i lažne, povratne vrijednosti je lako razumjeti. S druge strane, ako su oba istinita ili su oba lažna, povratna vrijednost bit će različita ovisno o redoslijedu.

Ako ga koristite kao uvjetni izraz u izjavi if, itd., rezultat se ocjenjuje kao booleova vrijednost i obrađuje, tako da se ne morate brinuti o tome, ali ako koristite povratnu vrijednost za daljnju obradu, treba biti oprezan.

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

Ako ga želite tretirati kao istinito ili lažno, možete učiniti kao u posljednjem primjeru.
bool(x and y)

Povratne vrijednosti i i ili sažete su u donjoj tablici.

xyx and yx or y
truefalseyx
falsetruexy
truetrueyx
falsefalsexy

Kratki spoj (procjena kratkog spoja)

Kao što možete vidjeti iz gornje tablice, ako je x netočan u x i y, ili ako je x istinit u x ili y, povratna vrijednost će biti x bez obzira na vrijednost y.

U takvom slučaju, y se ne vrednuje.

and,orImajte na umu da ako pozovete funkciju ili metodu na desnoj strani ovih procesa da izvršite neku obradu, proces se možda neće izvršiti ovisno o rezultatu na lijevoj strani.

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