Einführung
In diesem Lab gewinnen Sie ein praktisches Verständnis der Operatorrangfolge (Operator Precedence) in Python. Genau wie in der Mathematik befolgt Python spezifische Regeln, um die Reihenfolge festzulegen, in der Operationen innerhalb eines Ausdrucks ausgeführt werden. Ein solides Verständnis dieser Regeln ist unerlässlich, um Code zu schreiben, der sowohl korrekt als auch vorhersagbar ist.
Wir beginnen damit, die Rangfolge grundlegender arithmetischer Operatoren zu untersuchen. Anschließend sehen wir, wie Operatoren höherer Stufe, wie Potenzierung und Vergleich, in diese Hierarchie passen. Schließlich lernen Sie, wie Sie Klammern verwenden, um die Standardreihenfolge der Operationen zu überschreiben – eine Technik, die sowohl für die Steuerung von Berechnungen als auch zur Verbesserung der Lesbarkeit des Codes entscheidend ist.
Grundlegende arithmetische Rangfolge
In Python haben, wie in der Standardmathematik, einige arithmetische Operatoren eine höhere Rangfolge als andere. Insbesondere werden Multiplikation (*) und Division (/) vor Addition (+) und Subtraktion (-) ausgeführt. Wenn Operatoren die gleiche Rangfolge haben, werden sie von links nach rechts ausgewertet.
Beobachten wir dieses Verhalten. Der Einrichtungsprozess hat bereits eine Datei für Sie erstellt. Suchen Sie im WebIDE-Dateiexplorer auf der linken Seite die Datei operator_precedence.py im Verzeichnis ~/project und öffnen Sie diese.
Fügen Sie den folgenden Code in die Datei ein:
## Multiplication and division are evaluated before addition and subtraction.
result = 10 + 4 * 3 - 10 / 5
print(result)
Dieser Ausdruck enthält Addition, Multiplikation, Subtraktion und Division. Lassen Sie uns die Reihenfolge der Operationen vorhersagen:
- Python führt zuerst die Multiplikation durch:
4 * 3ergibt12. - Als Nächstes führt es die Division durch:
10 / 5ergibt2.0. Beachten Sie, dass die Standarddivision in Python 3 immer eine Gleitkommazahl (floating-point number) ergibt. - Der Ausdruck lautet nun
10 + 12 - 2.0. - Schließlich führt es die Addition und Subtraktion von links nach rechts durch:
10 + 12ist22, und22 - 2.0ist20.0.
Speichern Sie die Datei, indem Sie Strg + S drücken. Um den Code auszuführen, öffnen Sie ein Terminal in der WebIDE (Terminal -> New Terminal) und führen Sie den folgenden Befehl aus:
python ~/project/operator_precedence.py
Sie werden das berechnete Ergebnis im Terminal ausgegeben sehen.
20.0
Die Ausgabe stimmt mit unserer Vorhersage überein und bestätigt die höhere Rangfolge von Multiplikation und Division gegenüber Addition und Subtraktion.
Operatoren höherer Stufe
Die Operatorhierarchie von Python erstreckt sich über die grundlegende Arithmetik hinaus. Der Potenzierungsoperator (**) hat eine höhere Rangfolge als Multiplikation und Division. Darüber hinaus haben alle arithmetischen Operatoren eine höhere Rangfolge als Vergleichsoperatoren wie "größer als" (>).
Fügen wir unserem Skript weitere Beispiele hinzu, um dies in Aktion zu sehen. Ändern Sie die Datei ~/project/operator_precedence.py, um zwei neue Ausdrücke aufzunehmen:
## Multiplication and division are evaluated before addition and subtraction.
result = 10 + 4 * 3 - 10 / 5
print(result)
## Exponentiation has higher precedence than multiplication.
exp_result = 2 * 3 ** 2
print(exp_result)
## Arithmetic operators have higher precedence than comparison operators.
comp_result = 18 > 5 + 10
print(comp_result)
Analysieren wir die neuen Zeilen:
- Bei
2 * 3 ** 2wird zuerst die Potenzierung3 ** 2berechnet, was9ergibt. Anschließend wird die Multiplikation2 * 9durchgeführt, was18ergibt. - Bei
18 > 5 + 10wird zuerst die Addition5 + 10berechnet, was15ergibt. Danach wird der Vergleich18 > 15ausgewertet, wasTrueist.
Speichern Sie die Datei (Strg + S) und führen Sie das Skript erneut aus.
python ~/project/operator_precedence.py
Das Terminal zeigt nun die Ergebnisse aller drei Ausdrücke an.
20.0
18
True
Dies bestätigt, dass Python die Potenzierung zuerst, gefolgt von anderen arithmetischen Operationen und schließlich Vergleichsoperationen auswertet.
Verwendung von Klammern zur Steuerung der Auswertungsreihenfolge
Obwohl die Vorrangregeln von Python konsistent sind, können komplexe Ausdrücke schwer lesbar sein. Um die Standardreihenfolge zu überschreiben oder einfach Ihre Absichten klarzustellen, können Sie Klammern () verwenden. Jeder Ausdruck, der in Klammern eingeschlossen ist, wird zuerst ausgewertet.
Ändern wir eines unserer vorherigen Beispiele, um die Wirkung von Klammern zu sehen. Fügen Sie am Ende von ~/project/operator_precedence.py einen neuen Ausdruck hinzu.
## Multiplication and division are evaluated before addition and subtraction.
result = 10 + 4 * 3 - 10 / 5
print(result)
## Exponentiation has higher precedence than multiplication.
exp_result = 2 * 3 ** 2
print(exp_result)
## Arithmetic operators have higher precedence than comparison operators.
comp_result = 18 > 5 + 10
print(comp_result)
## Using parentheses to change the order of evaluation.
forced_result = (10 + 4) * 3
print(forced_result)
Analysieren wir die neue Zeile (10 + 4) * 3:
- Da
10 + 4in Klammern steht, wird es zuerst ausgewertet, was14ergibt. - Anschließend wird die Multiplikation
14 * 3durchgeführt, was42ergibt.
Dies unterscheidet sich von 10 + 4 * 3, von dem wir wissen, dass es zu 22 ausgewertet wird. Die Klammern haben das Ergebnis vollständig verändert.
Speichern Sie die Datei und führen Sie das Skript ein letztes Mal aus.
python ~/project/operator_precedence.py
Die Ausgabe enthält nun das Ergebnis unseres geklammerten Ausdrucks.
20.0
18
True
42
Die Verwendung von Klammern, auch wenn sie nicht unbedingt erforderlich ist, ist eine gute Vorgehensweise. Sie macht die Reihenfolge der Operationen explizit, was die Lesbarkeit des Codes verbessert und die Wahrscheinlichkeit von Fehlern, die durch Missverständnisse der Rangfolge entstehen, verringert.
Zusammenfassung
In diesem Lab haben Sie das grundlegende Konzept der Operatorrangfolge (Operator Precedence) in Python untersucht. Sie begannen mit der grundlegenden Arithmetik und bestätigten, dass Multiplikation und Division Vorrang vor Addition und Subtraktion haben. Anschließend haben Sie gelernt, dass andere Operatoren, wie Potenzierung und Vergleich, ihren eigenen Platz in der Hierarchie haben.
Am wichtigsten ist, dass Sie geübt haben, Klammern zu verwenden, um die Auswertungsreihenfolge explizit zu steuern. Diese Fähigkeit ist entscheidend, um Code zu schreiben, der nicht nur funktional korrekt, sondern auch klar und für andere verständlich ist. Durch die Beherrschung der Operatorrangfolge haben Sie einen wichtigen Schritt zum Schreiben robusterer und zuverlässigerer Python-Programme gemacht.



