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
,not
Prioritet operatera
Osim toga, sljedeće točke su objašnjene kao upozorenja.
- Logički operatori za objekte tipa koji nije bool
and
,or
Ove 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.
not
and
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.
x | y | x and y | x or y |
---|---|---|---|
true | false | y | x |
false | true | x | y |
true | true | y | x |
false | false | x | y |
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
,or
Imajte 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