Forrang og tilknytning til operatører i Python

I denne vejledning lærer du, hvordan operatørers forrang og associativitet påvirker rækkefølgen af ​​operationer i Python.

Python-operatørers forrang

Kombinationen af ​​værdier, variabler, operatorer og funktionsopkald betegnes som et udtryk. Python-tolken kan evaluere et gyldigt udtryk.

For eksempel:

 >>> 5 - 7 -2

Her 5 - 7er et udtryk. Der kan være mere end én operator i et udtryk.

For at evaluere disse typer udtryk er der en forrangsregel i Python. Den styrer rækkefølgen, i hvilken disse operationer udføres.

For eksempel har multiplikation højere forrang end subtraktion.

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

Men vi kan ændre denne rækkefølge ved hjælp af parenteser, ()da den har højere forrang end multiplikation.

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

Operatørprioriteten i Python er angivet i følgende tabel. Det er i faldende rækkefølge (øvre gruppe har højere forrang end de nederste).

Operatører Betyder
() Parenteser
** Eksponent
+x, -x,~x Unary plus, Unary minus, Bitwise IKKE
*, /, //,% Multiplikation, division, gulvdeling, modul
+, - Addition, subtraktion
<<, >> Bitvis skiftoperatører
& Bitvis OG
^ Bitvis XOR
| Bitvis ELLER
==, !=, >, >=, <, <=, is, is not, in,not in Sammenligninger, identitet, medlemsoperatører
not Logisk IKKE
and Logisk OG
or Logisk ELLER

Lad os se på nogle eksempler:

Antag, at vi konstruerer en if… elseblok, der kører, ifnår frokosten enten er frugt eller sandwich, og kun hvis penge er mere end eller lig med 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")

Produktion

 Frokost bliver leveret

Dette program kører ifblok, selv når penge er 0. Det giver os ikke det ønskede output, da forrang for ander højere end or.

Vi kan få det ønskede output ved at bruge parentes ()på følgende måde:

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

Produktion

 Kan ikke levere frokost

Associativitet af Python-operatører

Vi kan se i ovenstående tabel, at der findes mere end en operator i samme gruppe. Disse operatører har samme forrang.

Når to operatører har samme forrang, hjælper associativitet med at bestemme rækkefølgen af ​​operationer.

Associativitet er den rækkefølge, hvor et udtryk evalueres, der har flere operatorer af samme forrang. Næsten alle operatørerne har associativitet fra venstre mod højre.

For eksempel har multiplikation og gulvdeling samme forrang. Derfor, hvis begge er til stede i et udtryk, evalueres den venstre først.

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

Produktion

 3 0

Bemærk : Eksponentoperatøren **har associativitet fra højre mod 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 svarer til 2 ** (3 ** 2).

Ikke-associerede operatører

Nogle operatører som opgaveoperatører og sammenligningsoperatører har ikke associativitet i Python. Der er separate regler for sekvenser af denne type operator og kan ikke udtrykkes som associativitet.

For eksempel x < y < zbetyder hverken (x < y) < zeller x < (y < z). x < y < zsvarer til x < y and y < zog evalueres fra venstre mod højre.

Selvom sammenkædning af opgaver ligesom x = y = z = 1er perfekt gyldig, x = y = z+= 2vil det desuden resultere i fejl.

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

Produktion

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

Interessante artikler...