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
Operator | Bedeutung |
---|---|
lambda | Lambda-Funktion |
or | Logisches ODER |
and | Logisches UND |
not x | Logisches NICHT |
in, not in | Mitgliedschaftstest (bei Sequenzen) |
is, is not | Test auf Identität |
<, <=, >, >=, !=, == | Vergleiche |
| | Bitweises ODER |
^ | Bitweises XOR |
& | Bitweises UND |
<<, >> | Bitweise Verschiebungen |
+, - | Addition und Subtraktion |
*, /, % | Multiplikation, Division und Rest |
+x, -x | Positives und negatives Vorzeichen |
~x | Bitweises NICHT |
** | Potenzierung |
x.attribut | Attributreferenzierung |
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.
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
.
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.