Az operátorok elsőbbsége és asszociativitása a Pythonban

Ebben az oktatóanyagban megtudhatja, hogy az operátorok elsőbbsége és asszociativitása hogyan befolyásolja a műveletek sorrendjét a Pythonban.

A Python operátorok elsőbbsége

Az értékek, változók, operátorok és függvényhívások kombinációját kifejezésnek nevezzük. A Python tolmács ki tudja értékelni az érvényes kifejezést.

Például:

 >>> 5 - 7 -2

Itt 5 - 7van egy kifejezés. Egy kifejezésben több operátor is lehet.

Az ilyen típusú kifejezések kiértékeléséhez egy elsőbbségi szabály érvényes a Pythonban. Ez irányítja e műveletek végrehajtásának sorrendjét.

Például a szorzásnak nagyobb az elsőbbsége, mint a kivonásnak.

 # Multiplication has higher precedence # than subtraction >>> 10 - 4 * 2 2

De ezt a sorrendet zárójelek segítségével módosíthatjuk (), mivel nagyobb az elsőbbsége, mint a szorzás.

 # Parentheses () has higher precedence >>> (10 - 4) * 2 12

A Python operátor elsőbbségét a következő táblázat sorolja fel. Csökkenő sorrendben van (a felső csoport elsőbbséget élvez, mint az alsó csoport).

Operátorok Jelentése
() Zárójelek
** Kitevő
+x, -x,~x Unary plus, Unary mínusz, Bitwise NOT
*, /, //,% Szorzás, osztás, emelet osztás, modulus
+, - Összeadás, kivonás
<<, >> Bitenkénti váltás operátorok
& Bitenkénti ÉS
^ Bitenként XOR
| Bitenként VAGY
==, !=, >, >=, <, <=, is, is not, in,not in Összehasonlítások, identitás, tagsági operátorok
not Logikus NEM
and Logikai ÉS
or Logikai VAGY

Nézzünk meg néhány példát:

Tegyük fel, hogy építünk egy if… elseblokkot, amely akkor fut, ifamikor az ebéd gyümölcs vagy szendvics, és csak akkor, ha a pénz nagyobb, mint 2.

 # Precedence of or & and meal = "fruit" money = 0 if meal == "fruit" or meal == "sandwich" and money>= 2: print("Lunch being delivered") else: print("Can't deliver lunch")

Kimenet

 Ebédet szállítanak

Ez a program akkor is futtatja a ifblokkot, ha a pénz 0. Nem adja meg a kívánt kimenetet, mivel a fontossági sorrend andmagasabb, mint or.

A kívánt kimenetet a zárójelek használatával ()a következő módon kaphatjuk meg :

 # Precedence of or & and meal = "fruit" money = 0 if (meal == "fruit" or meal == "sandwich") and money>= 2: print("Lunch being delivered") else: print("Can't deliver lunch")

Kimenet

 Nem tudok ebédet leadni

A Python operátorok asszociativitása

A fenti táblázatból láthatjuk, hogy egynél több operátor létezik ugyanabban a csoportban. Ezeknek az operátoroknak ugyanaz az elsőbbségük.

Ha két operátornak ugyanaz az elsőbbsége, az asszociativitás segít meghatározni a műveletek sorrendjét.

Az asszociativitás az a sorrend, amelyben egy olyan kifejezést értékelünk, amelynek több operátora azonos prioritású. Szinte az összes operátor balról jobbra asszociatív.

Például a szorzásnak és a padlófelosztásnak ugyanaz az elsőbbsége. Ezért, ha mindkettő jelen van egy kifejezésben, akkor először a bal oldalt értékelik.

 # Left-right associativity # Output: 3 print(5 * 2 // 3) # Shows left-right associativity # Output: 0 print(5 * (2 // 3))

Kimenet

 3 0

Megjegyzés : Az Exponent operátor **jobbról balra asszociativitással rendelkezik a Pythonban.

 # Shows the right-left associativity of ** # Output: 512, Since 2**(3**2) = 2**9 print(2 ** 3 ** 2) # If 2 needs to be exponated fisrt, need to use () # Output: 64 print((2 ** 3) ** 2)

Láthatjuk, hogy 2 ** 3 ** 2ez egyenértékű 2 ** (3 ** 2).

Nem asszociatív operátorok

Egyes operátorok, például a hozzárendelési operátorok és az összehasonlító operátorok, nem rendelkeznek asszociativitással a Pythonban. Az ilyen típusú operátorok szekvenciáira külön szabályok vonatkoznak, és nem fejezhetők ki asszociativitásként.

Például x < y < zsem (x < y) < znem , sem nem x < (y < z). x < y < zekvivalens x < y and y < z, és balról jobbra értékelik.

Továbbá, bár a hasonló hozzárendelések láncolása x = y = z = 1tökéletesen érvényes, x = y = z+= 2hibát fog eredményezni.

 # Initialize x, y, z x = y = z = 1 # Expression is invalid # (Non-associative operators) # SyntaxError: invalid syntax x = y = z+= 2

Kimenet

 "" Fájl, 8. sor x = y = z + = 2 SyntaxError: érvénytelen szintaxis

érdekes cikkek...