A Byte of Python

Auswertungsreihenfolge der Operatoren

Wird bei einem Ausdruck wie z.B. 2 + 3 * 4 zuerst die Addition oder die Multiplikation durchgeführt? Wie wir aus der Schulmathematik wissen, kommt die Multiplikation zuerst - d.h. der Operator für die Multiplikation hat gegenüber dem Operator für die Addition eine höhere Priorität.

Die nachfolgende Tabelle listet alle Operatoren in Python in aufsteigender Reihenfolge ihrer Priorität auf, von der niedrigsten Priorität (am schwächsten bindend) zur höchsten (am stärksten bindend). Mit anderen Worten wird der Python-Interpreter bei einem Ausdruck zuerst die Operatoren auswerten, die in der Tabelle weiter unten stehen, bevor er die Operatoren auswertet, die weiter oben stehen.

Die Tabelle soll hier nur zur Vervollständigung dienen (Sie finden diese auch im Python-Referenzhandbuch). Ich rate Ihnen, Operatoren und Operanden mit Klammern zu gruppieren, um die Reihenfolge der Auswertung zu verdeutlichen. Das Programm wird dadurch auch lesbarer. Der Ausdruck 2 + (3 * 4) ist z.B. viel klarer als 2 + 3 * 4. Wie überall gilt es auch bei Klammern auf eine vernünftige Verwendung zu achten und diese wegzulassen, wo sie nicht benötigt werden (wie bei 2 + (3 + 4)).

Tabelle 5.2. Auswertungsreihenfolge der Operatoren

OperatorBedeutung
lambdaLambda-Funktion
orLogisches ODER
andLogisches UND
not xLogisches NICHT
in, not inMitgliedschaftstest (bei Sequenzen)
is, is notTest auf Identität
<, <=, >, >=, !=, ==Vergleiche
|Bitweises ODER
^Bitweises XOR
&Bitweises UND
<<, >>Bitweise Verschiebungen
+, -Addition und Subtraktion
*, /, %Multiplikation, Division und Rest
+x, -xPositives und negatives Vorzeichen
~xBitweises NICHT
**Potenzierung
x.attributAttributreferenzierung
x[index]Indexierung
x[index:index]Teilbereich einer Sequenz
f(parameter ...)Funktionsaufruf
(ausdruck, ...)Klammerung oder Bildung von Tupeln
[ausdruck, ...]Bildung von Listen
{schluessel:wert, ...}Bildung von Dictionaries
`ausdruck, ...`Umwandlung in Stringdarstellung

In der Tabelle tauchen einige bisher noch nicht besprochene Operatoren auf, die in späteren Kapiteln erläutert werden.

Operatoren mit gleicher Priorität sind in der obigen Tabelle in der gleichen Zeile aufgeführt. Die Operatoren + und - haben z.B. die gleiche Priorität.

Auswertungsreihenfolge

Normalerweise werden die Operatoren in der Reihenfolge wie in der Tabelle angegeben ausgewertet. Sie können diese Reihenfolge jedoch durch die Verwendung von Klammern abändern. Wenn Sie etwa möchten, dass bei einem Ausdruck eine Addition vor einer Multiplikation ausgewertet wird, schreiben Sie (2 + 3) * 4.

Assoziativität

Operatoren mit gleicher Priorität werden innerhalb eines Ausdrucks von links nach rechts ausgewertet. Zum Beispiel wird 2 + 3 + 4 wie (2 + 3) + 4 ausgewertet. Manche Operatoren, wie z.B. der Zuweisungsoperator, sind rechtsassoziativ. D.h. der Ausdruck a = b = c wird wie a = (b = c) behandelt.