Operaatorite prioriteet ja assotsiatiivsus Pythonis

Selles õpetuses saate teada, kuidas operaatorite tähtsus ja assotsiatiivsus mõjutavad Pythonis toimingute järjekorda.

Pythoni operaatorite ülimuslikkus

Väärtuste, muutujate, operaatorite ja funktsioonikutsete kombinatsiooni nimetatakse väljendiks. Pythoni tõlk saab hinnata kehtivat avaldist.

Näiteks:

 >>> 5 - 7 -2

Siin 5 - 7on väljend. Avaldises võib olla mitu operaatorit.

Seda tüüpi avaldiste hindamiseks on Pythonis ülimuslik reegel. See juhendab nende toimingute teostamise järjekorda.

Näiteks korrutamisel on suurem prioriteet kui lahutamisel.

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

Kuid me saame seda järjekorda muuta sulgude abil, ()kuna sellel on suurem prioriteet kui korrutamisel.

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

Operaatori prioriteet Pythonis on loetletud järgmises tabelis. See on kahanevas järjekorras (ülemine rühm on kõrgemal kui alumine).

Operaatorid Tähendus
() Sulgudes
** Eksponent
+x, -x,~x Unary pluss, Unary miinus, Bitwise EI
*, /, //,% Korrutamine, jagamine, korrusjaotus, moodul
+, - Liitmine, lahutamine
<<, >> Pikkade vahetustega operaatorid
& Pikkade kaupa JA
^ Piki XOR
| Piki VÕI
==, !=, >, >=, <, <=, is, is not, in,not in Võrdlused, identiteet, liikmesuse operaatorid
not Loogiline EI
and Loogiline JA
or Loogiline VÕI

Vaatame mõningaid näiteid:

Oletame, et me ehitame if… elseploki, mis töötab ifsiis, kui lõunasöök on kas puuvilja või võileib, ja ainult siis, kui raha on suurem kui 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")

Väljund

 Lõunasöök toimetatakse

See programm töötab ifblokeeringuga isegi siis, kui raha on 0. See ei anna meile soovitud väljundit, kuna prioriteet andon suurem kui or.

Soovitud väljundi saame sulgude ()abil järgmisel viisil:

 # 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")

Väljund

 Lõunasööki ei saa kätte

Pythoni operaatorite assotsiatiivsus

Ülaltoodud tabelist näeme, et samas rühmas on rohkem kui üks operaator. Nendel operaatoritel on sama ülimuslikkus.

Kui kahel operaatoril on sama ülimuslikkus, aitab assotsiatiivsus määrata toimingute järjekorra.

Assotsiatiivsus on avaldise hindamise järjekord, millel on mitu sama prioriteediga operaatorit. Peaaegu kõigil operaatoritel on vasakult paremale assotsiatiivsus.

Näiteks korrutamisel ja põranda jagamisel on sama ülimuslikkus. Seega, kui mõlemad on avaldises olemas, hinnatakse kõigepealt vasakpoolset.

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

Väljund

 3 0

Märkus . Eksponentoperaatoril **on Pythonis paremalt vasakule assotsiatiivsus.

 # 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)

Näeme, et see 2 ** 3 ** 2on samaväärne 2 ** (3 ** 2).

Mittesotsiatiivsed operaatorid

Mõned operaatorid, nagu määranguoperaatorid, ja võrdlusoperaatorid ei oma Pythonis assotsiatsiooni. Sellist tüüpi operaatorite järjestuste jaoks on eraldi reeglid ja neid ei saa väljendada assotsiatiivsusena.

Näiteks x < y < zei tähenda (x < y) < zega tähenda x < (y < z). x < y < zon samaväärne x < y and y < zja seda hinnatakse vasakult paremale.

Pealegi, kuigi sarnaste ülesannete aheldamine x = y = z = 1on täiesti kehtiv, x = y = z+= 2toob see kaasa vea.

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

Väljund

 Fail "", rida 8 x = y = z + = 2 SyntaxError: kehtetu süntaks

Huvitavad Artiklid...