Vorrang und Assoziativität von Operatoren in Python

In diesem Lernprogramm erfahren Sie, wie sich Vorrang und Assoziativität von Operatoren auf die Reihenfolge der Operationen in Python auswirken.

Vorrang von Python-Operatoren

Die Kombination von Werten, Variablen, Operatoren und Funktionsaufrufen wird als Ausdruck bezeichnet. Der Python-Interpreter kann einen gültigen Ausdruck auswerten.

Beispielsweise:

 >>> 5 - 7 -2

Hier 5 - 7ist ein Ausdruck. Ein Ausdruck kann mehr als einen Operator enthalten.

Um diese Arten von Ausdrücken auszuwerten, gibt es in Python eine Vorrangregel. Es gibt die Reihenfolge an, in der diese Vorgänge ausgeführt werden.

Beispielsweise hat die Multiplikation eine höhere Priorität als die Subtraktion.

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

Wir können diese Reihenfolge jedoch in Klammern ändern, ()da sie eine höhere Priorität als die Multiplikation hat.

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

Die Operatorrangfolge in Python ist in der folgenden Tabelle aufgeführt. Es ist in absteigender Reihenfolge (obere Gruppe hat höhere Priorität als die untere).

Betreiber Bedeutung
() Klammern
** Exponent
+x, -x,~x Unäres Plus, Unäres Minus, Bitweises NICHT
*, /, //,% Multiplikation, Division, Bodenteilung, Modul
+, - Addition Subtraktion
<<, >> Bitweise Verschiebungsoperatoren
& Bitweises UND
^ Bitweises XOR
| Bitweises ODER
==, !=, >, >=, <, <=, is, is not, in,not in Vergleiche, Identität, Mitgliedschaftsbetreiber
not Logisch NICHT
and Logisches UND
or Logisches ODER

Schauen wir uns einige Beispiele an:

Angenommen, wir bauen einen if… elseBlock, der ausgeführt wird, ifwenn das Mittagessen entweder Obst oder Sandwich ist und nur, wenn das Geld mehr als oder gleich 2 ist.

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

Ausgabe

 Mittagessen wird geliefert

Dieses Programm führt einen ifBlock aus, selbst wenn Geld 0 ist. Es gibt uns nicht die gewünschte Ausgabe, da die Priorität von andhöher als ist or.

Wir können die gewünschte Ausgabe erhalten, indem wir ()die folgenden Klammern verwenden :

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

Ausgabe

 Ich kann kein Mittagessen liefern

Assoziativität von Python-Operatoren

In der obigen Tabelle sehen wir, dass mehr als ein Operator in derselben Gruppe vorhanden ist. Diese Operatoren haben die gleiche Priorität.

Wenn zwei Operatoren dieselbe Priorität haben, hilft die Assoziativität bei der Bestimmung der Reihenfolge der Operationen.

Assoziativität ist die Reihenfolge, in der ein Ausdruck ausgewertet wird, der mehrere Operatoren mit derselben Priorität hat. Fast alle Operatoren haben eine Assoziativität von links nach rechts.

Zum Beispiel haben Multiplikation und Bodenteilung die gleiche Priorität. Wenn also beide in einem Ausdruck vorhanden sind, wird der linke zuerst ausgewertet.

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

Ausgabe

 3 0

Hinweis : Der Exponentenoperator **hat in Python eine Assoziativität von rechts nach links.

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

Wir können sehen, dass 2 ** 3 ** 2das gleichbedeutend ist mit 2 ** (3 ** 2).

Nicht assoziative Operatoren

Einige Operatoren wie Zuweisungsoperatoren und Vergleichsoperatoren haben in Python keine Assoziativität. Es gibt separate Regeln für Sequenzen dieser Art von Operatoren und können nicht als Assoziativität ausgedrückt werden.

Zum Beispiel x < y < zbedeutet weder (x < y) < znoch x < (y < z). x < y < zist äquivalent zu x < y and y < zund wird von links nach rechts ausgewertet.

Während die Verkettung von Zuweisungen wie x = y = z = 1vollkommen gültig ist, x = y = z+= 2führt dies zu Fehlern.

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

Ausgabe

 Datei "", Zeile 8 x = y = z + = 2 SyntaxError: ungültige Syntax

Interessante Beiträge...