A Python logikai operátorokat biztosít logikai (Boolean) műveletek elvégzésére.(and
,or
,not
)
Több feltétel közötti kapcsolat leírására szolgál egy if utasításban.
Ez a szakasz a következőket írja le.
- kereszteződés:
and
- logikai hozzáadás:
or
- tagadás:
not
and
,or
,not
Üzemeltetői elsőbbség
Ezenkívül a következő pontok óvatosságra intenek.
- Logikai operátorok booltól eltérő típusú objektumokhoz
and
,or
Ezek a visszatérési értékek nem feltétlenül bool típusúak.- Rövidzárlat (rövidzárlat értékelése)
kereszteződés: and
és két érték logikai szorzatát adja vissza.
print(True and True)
# True
print(True and False)
# False
print(False and True)
# False
print(False and False)
# False
Valójában gyakran nem igaz vagy hamis, hanem összehasonlító operátorokat használó feltételes kifejezésekhez használják. Tájékoztatásul közöljük, hogy az összehasonlító operátorok a következők.
<
>
a = 10
print(0 < a)
# True
print(a < 100)
# True
print(0 < a and a < 100)
# True
és a következőképpen kapcsolhatók össze.
print(0 < a < 100)
# True
logikai hozzáadás: or
vagy a két érték logikai VAGY-ját adja vissza.
print(True or True)
# True
print(True or False)
# True
print(False or True)
# True
print(False or False)
# False
tagadás: not
not” az érték negációját adja vissza; az igaz és a hamis értékek felcserélődnek.
print(not True)
# False
print(not False)
# True
and,or,notÜzemeltetői elsőbbség
Ezeknek a logikai operátoroknak az elsőbbségi sorrendje a következő: a not a legmagasabb.
not
and
or
A következő példakódban a fenti kifejezés úgy értelmeződik, mintha az alábbi kifejezés lenne. Mivel a plusz zárójelekkel nincs probléma, talán egyszerűbb egyértelműen leírni őket az olyan esetekben, mint ez a példa.
print(True or True and False)
# True
print(True or (True and False))
# True
Ha az és előtt vagy-t akarsz használni, használd a zárójeleket().
print((True or True) and False)
# False
<
,>
Ezeknek az összehasonlító operátoroknak még nagyobb az elsőbbsége, mint a nem. Ezért a zárójelek nem szükségesek minden egyes összehasonlítási művelethez, mint a fenti példában.
print(0 < a and a < 100)
# True
A Python operátorok elsőbbségéről az alábbi hivatalos dokumentációban találsz összefoglalót.
Logikai operátorok booltól eltérő típusú objektumokhoz
Ezekkel a logikai operátorokkal nemcsak a bool típusok (igaz, hamis), hanem a számok, karakterláncok, listák stb. is bool értékként kezelhetők.
A következő objektumok a Python logikai műveleteiben hamisnak számítanak.
- Falsnak definiált konstansok:
None
,false
- Nulla numerikus típusokban:
0
,0
,0j
,Decimal(0)
,Fraction(0, 1)
- Üres sorozat vagy gyűjtemény:
''
,()
,[]
,{}
,set()
,range(0)
Minden más értéket igaznak tekintünk.
A bool() függvény egy objektum bool értékének lekérdezésére használható. Vegyük figyelembe, hogy a '0' vagy 'False' karakterláncot igaznak tekintjük.
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
A '0' vagy 'false' értékek hamisként való kezeléséhez használja a distutils.util.strtobool() függvényt.
and,orEzek a visszatérési értékek nem feltétlenül bool típusúak.
Íme egy példa egy nem bool típusú objektumra, amely az egyes operátorok eredményét mutatja egy numerikus értéken.
x = 10 # True
y = 0 # False
print(x and y)
# 0
print(x or y)
# 10
print(not x)
# False
Amint a fenti példából látható, az and és az or a Pythonban nem a bool típusú bool igaz vagy hamis értékét adja vissza, hanem a bal vagy jobb oldali értéket, attól függően, hogy igaz vagy hamis. A példa numerikus, de ugyanez vonatkozik más típusokra is, például a karakterláncokra és a listákra. Mellesleg a not true vagy false típusú bool értéket ad vissza.
Az and és az or visszatérési értékeinek definíciói a következők.
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
Ha a bal és a jobb oldali kifejezés értékei külön-külön igazak és hamisak, a visszatérési értékek könnyen érthetőek. Másrészt, ha mindkettő igaz vagy mindkettő hamis, a visszatérési érték a sorrendtől függően eltérő lesz.
Ha feltételes kifejezésként használod egy if utasításban stb., az eredményt boolean értékként értékeli és feldolgozza, így nem kell aggódnod emiatt, de ha a visszatérési értéket további feldolgozásra használod, akkor óvatosnak kell lenned.
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
Ha igazként vagy hamisként akarod kezelni, akkor az előző példához hasonlóan teheted meg.bool(x and y)
Az és és vagy visszatérési értékeit az alábbi táblázat foglalja össze.
x | y | x and y | x or y |
---|---|---|---|
true | false | y | x |
false | true | x | y |
true | true | y | x |
false | false | x | y |
Rövidzárlat (rövidzárlat értékelése)
Amint a fenti táblázatból látható, ha x hamis x és y esetén, vagy ha x igaz x vagy y esetén, akkor a visszatérési érték x lesz, függetlenül y értékétől.
Ilyen esetben y nem kerül kiértékelésre.
and
,or
Vegye figyelembe, hogy ha ezeknek a folyamatoknak a jobb oldalán egy függvényt vagy metódust hív meg valamilyen feldolgozáshoz, a folyamat a bal oldalon lévő eredménytől függően nem biztos, hogy végrehajtásra kerül.
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