Forrang og tilknytning til operatører i Python

I denne opplæringen lærer du hvordan forrang og tilknytning til operatører påvirker rekkefølgen for operasjoner i Python.

Forrang for Python-operatører

Kombinasjonen av verdier, variabler, operatører og funksjonskall kalles et uttrykk. Python-tolken kan evaluere et gyldig uttrykk.

For eksempel:

 >>> 5 - 7 -2

Her 5 - 7er et uttrykk. Det kan være mer enn én operator i et uttrykk.

For å evaluere disse typer uttrykk er det en forrangsregel i Python. Den styrer rekkefølgen disse operasjonene utføres i.

For eksempel har multiplikasjon høyere forrang enn subtraksjon.

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

Men vi kan endre denne rekkefølgen ved hjelp av parenteser, ()da den har høyere prioritet enn multiplikasjon.

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

Operatørprioriteten i Python er oppført i følgende tabell. Det er i fallende rekkefølge (øvre gruppe har høyere forrang enn de nedre).

Operatører Betydning
() Parenteser
** Eksponent
+x, -x,~x Unary pluss, Unary minus, Bitvis IKKE
*, /, //,% Multiplikasjon, divisjon, gulvdivisjon, modul
+, - Tillegg, subtraksjon
<<, >> Bitvis skiftoperatører
& Bitvis OG
^ Bitvis XOR
| Bitvis ELLER
==, !=, >, >=, <, <=, is, is not, in,not in Sammenligning, identitet, medlemsoperatører
not Logisk IKKE
and Logisk OG
or Logisk ELLER

La oss se på noen eksempler:

Anta at vi konstruerer en if… elseblokk som løper ifnår lunsj enten er frukt eller sandwich, og bare hvis pengene er mer enn eller lik 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")

Produksjon

 Lunsj blir levert

Dette programmet kjører ifblokkere selv når penger er 0. Det gir oss ikke ønsket utgang siden forrang av ander høyere enn or.

Vi kan få ønsket produksjon ved å bruke parentes ()på følgende måte:

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

Produksjon

 Kan ikke levere lunsj

Associativitet av Python-operatører

Vi kan se i tabellen ovenfor at det finnes flere operatører i samme gruppe. Disse operatørene har samme forrang.

Når to operatører har samme forrang, hjelper assosiativitet til å bestemme rekkefølgen på operasjonene.

Assosiativitet er den rekkefølgen et uttrykk blir evaluert som har flere operatorer av samme forrang. Nesten alle operatørene har assosiativitet fra venstre til høyre.

For eksempel har multiplikasjon og gulvdeling samme forrang. Derfor, hvis begge er til stede i et uttrykk, blir den venstre evaluert først.

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

Produksjon

 3 0

Merk : Eksponentoperatør **har assosiativitet fra høyre til venstre i Python.

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

Vi kan se at 2 ** 3 ** 2det tilsvarer 2 ** (3 ** 2).

Ikke tilknyttede operatører

Noen operatører som oppdragsoperatører og sammenligningsoperatører har ikke tilknytning i Python. Det er separate regler for sekvenser av denne typen operatører og kan ikke uttrykkes som assosiativitet.

For eksempel x < y < zbetyr verken (x < y) < zeller x < (y < z). x < y < ztilsvarer x < y and y < z, og blir evaluert fra venstre til høyre.

Videre, mens kjetting av oppgaver som x = y = z = 1er helt gyldig, x = y = z+= 2vil det føre til feil.

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

Produksjon

 Fil "", linje 8 x = y = z + = 2 SyntaxError: ugyldig syntaks

Interessante artikler...