Operatorrangfolge in Python verstehen

PythonPythonBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einleitung

In diesem Lab erhalten Sie ein praktisches Verständnis der Operatorrangfolge (operator precedence) in Python. Genau wie in der Mathematik folgt Python spezifischen Regeln, um die Reihenfolge zu bestimmen, in der Operationen innerhalb eines Ausdrucks ausgeführt werden. Wir werden untersuchen, wie Python grundlegende arithmetische Operationen behandelt, die Rangfolgeregeln beim Mischen verschiedener Operatortypen verstehen und lernen, wie Klammern verwendet werden, um die Auswertungsreihenfolge explizit zu steuern und sicherzustellen, dass Ihr Code genau wie beabsichtigt funktioniert.

Durch praktische Übungen werden Sie Python-Code schreiben und ausführen, um die Auswirkungen der Operatorrangfolge zu beobachten und die Verwendung von Klammern zum Überschreiben des Standardverhaltens zu üben. Dieses Lab wird Ihr Verständnis eines grundlegenden Konzepts in der Programmierung festigen, das für das Schreiben von korrektem und vorhersehbarem Python-Code unerlässlich ist.

Erkundung der grundlegenden arithmetischen Rangfolge

In diesem Schritt werden wir die grundlegende arithmetische Rangfolge in Python untersuchen. Genau wie in der Mathematik folgt Python spezifischen Regeln, um die Reihenfolge zu bestimmen, in der Operationen ausgeführt werden. Die bekannteste Regel, an die Sie sich vielleicht erinnern, lautet: "Multiplikation und Division vor Addition und Subtraktion." Python hält sich an diese Regel und erweitert sie auf andere Operatoren.

Beginnen wir mit der Erstellung einer Python-Datei, um einige grundlegende arithmetische Ausdrücke zu testen.

Öffnen Sie das integrierte Terminal in der WebIDE, indem Sie auf Terminal -> New Terminal klicken. Stellen Sie sicher, dass Ihr aktuelles Verzeichnis ~/project ist.

Erstellen Sie nun eine neue Datei namens arithmetic_precedence.py im Verzeichnis ~/project mithilfe des WebIDE-Dateiexplorers oder der Kommandozeile.

touch ~/project/arithmetic_precedence.py

Öffnen Sie die Datei arithmetic_precedence.py im WebIDE-Editor und fügen Sie den folgenden Python-Code hinzu:

## Basic arithmetic precedence
print(5 + 6 * 3 - 4 / 2)

Dieser Ausdruck beinhaltet Addition, Multiplikation, Subtraktion und Division. Gemäß den Standard-Arithmetikregeln (und den Regeln von Python) haben Multiplikation und Division eine höhere Rangfolge als Addition und Subtraktion. Operationen mit derselben Rangfolge werden von links nach rechts ausgewertet.

Speichern Sie die Datei, indem Sie Strg + S drücken oder File -> Save verwenden.

Führen Sie nun das Python-Skript im Terminal aus:

python ~/project/arithmetic_precedence.py

Sie sollten die Ausgabe der Berechnung sehen.

21.0

Lassen Sie uns die Berechnung aufschlüsseln:

  1. 6 * 3 wird zuerst berechnet (18).
  2. 4 / 2 wird als nächstes berechnet (2.0).
  3. 5 + 18 wird berechnet (23).
  4. 23 - 2.0 wird berechnet (21.0).

Nun fügen wir ein weiteres Beispiel hinzu, das den Potenzierungsoperator (**) beinhaltet, der eine höhere Rangfolge als Multiplikation und Division hat.

Ändern Sie die Datei ~/project/arithmetic_precedence.py, um die folgende Zeile einzufügen:

## Basic arithmetic precedence
print(5 + 6 * 3 - 4 / 2)
print(2 * 3 ** 2)

Speichern Sie die Datei und führen Sie das Skript erneut aus:

python ~/project/arithmetic_precedence.py

Sie sollten die Ausgabe für beide Ausdrücke sehen.

21.0
18

Für den zweiten Ausdruck 2 * 3 ** 2:

  1. 3 ** 2 wird zuerst berechnet (9).
  2. 2 * 9 wird als nächstes berechnet (18).

Dies bestätigt, dass der Potenzierungsoperator eine höhere Rangfolge als die Multiplikation hat.

Verständnis der Rangfolge bei gemischten Operatoren

In diesem Schritt werden wir untersuchen, wie Python die Rangfolge behandelt, wenn verschiedene Arten von Operatoren in einem einzigen Ausdruck gemischt werden. Das Verständnis hierfür ist entscheidend für das Schreiben von korrektem und vorhersehbarem Code.

Python hat eine definierte Rangfolgeregel für verschiedene Operatortypen, einschließlich arithmetischer, Vergleichs-, Bitwise-, logischer, Identitäts- und Mitgliedschaftsoperatoren. Obwohl das Auswendiglernen der gesamten Tabelle nicht notwendig ist, ist das Verständnis der allgemeinen Hierarchie hilfreich.

Wir werden weiterhin die Datei ~/project/arithmetic_precedence.py verwenden. Öffnen Sie sie im WebIDE-Editor und fügen Sie die folgenden Beispiele hinzu, um die Rangfolge bei gemischten Operatoren zu demonstrieren:

## Basic arithmetic precedence
print(5 + 6 * 3 - 4 / 2)
print(2 * 3 ** 2)

## Precedence with mixed operators
print(1 << 5 - 4)  ## Bitwise left shift und Subtraktion
print(6 - 3 > 2 + 5) ## Subtraktion, Addition und Vergleich
print(6 and 0) ## Logisches AND
print(0 in [0]) ## Mitgliedschaft (Membership)
print(6 and 0 in [0]) ## Logisches AND und Mitgliedschaft

Speichern Sie die Datei.

Führen Sie nun das aktualisierte Skript im Terminal aus:

python ~/project/arithmetic_precedence.py

Beobachten Sie die Ausgabe für die neuen Zeilen:

21.0
18
2
False
0
True
True

Analysieren wir die Beispiele mit gemischten Operatoren:

  1. 1 << 5 - 4: Die Subtraktion (-) hat eine höhere Rangfolge als der bitweise Links-Shift (<<). Daher wird zuerst 5 - 4 berechnet (1), dann wird 1 << 1 berechnet (2).
  2. 6 - 3 > 2 + 5: Arithmetische Operationen (- und +) haben eine höhere Rangfolge als Vergleichsoperatoren (>). Daher wird 6 - 3 berechnet (3) und 2 + 5 berechnet (7). Anschließend wird 3 > 7 ausgewertet, was False ergibt.
  3. 6 and 0: Dies ist eine logische AND-Operation. In Python werden Nicht-Null-Zahlen in einem booleschen Kontext als True betrachtet, und 0 als False. Der and-Operator wertet den linken Operanden aus. Wenn dieser True ist, wertet er den rechten Operanden aus und gibt dessen Wert zurück. Wenn der linke Operand False ist, gibt er den Wert des linken Operanden zurück, ohne den rechten auszuwerten. Hier ist 6 True, daher wird 0 ausgewertet, was False ist, und 0 zurückgegeben.
  4. 0 in [0]: Dies ist ein Mitgliedschaftstest. Es wird geprüft, ob der Wert 0 in der Liste [0] vorhanden ist. Dies ist der Fall, daher wird True zurückgegeben.
  5. 6 and 0 in [0]: Dieser Ausdruck mischt das logische AND (and) und den Mitgliedschaftsoperator (in). Der Mitgliedschaftsoperator (in) hat eine höhere Rangfolge als logische Operatoren (and, or, not). Daher wird zuerst 0 in [0] ausgewertet, was True ergibt. Der Ausdruck wird dann zu 6 and True. Wie bereits erwähnt, wird 6 in einem booleschen Kontext als True behandelt. True and True ergibt True.

Dieser Schritt zeigt, dass das Verständnis der relativen Rangfolge verschiedener Operatortypen unerlässlich ist, um Python-Code korrekt zu interpretieren und zu schreiben.

Rangfolge mit Klammern steuern

In diesem Schritt lernen wir, wie wir mit Klammern () die Reihenfolge der Operationen in Python-Ausdrücken explizit steuern können. Obwohl Python definierte Regeln für die Operatorrangfolge hat, kann die Verwendung von Klammern Ihren Code klarer machen und unerwartete Ergebnisse verhindern, insbesondere bei komplexen Ausdrücken. Klammern erzwingen, dass die Operationen innerhalb von ihnen zuerst ausgewertet werden, unabhängig von der Standardrangfolge der Operatoren.

Wir arbeiten weiterhin mit der Datei ~/project/arithmetic_precedence.py. Öffnen Sie sie im WebIDE-Editor und fügen Sie die folgenden Beispiele hinzu, die die Verwendung von Klammern demonstrieren:

## Basic arithmetic precedence
print(5 + 6 * 3 - 4 / 2)
print(2 * 3 ** 2)

## Precedence with mixed operators
print(1 << 5 - 4)
print(6 - 3 > 2 + 5)
print(6 and 0)
print(0 in [0])
print(6 and 0 in [0])

## Using parentheses to control precedence
print((4 + 4) << 2) ## Addition vor Bitwise-Shift erzwingen
print(4 + (4 << 2)) ## Bitwise-Shift vor Addition erzwingen

Speichern Sie die Datei.

Führen Sie nun das aktualisierte Skript im Terminal aus:

python ~/project/arithmetic_precedence.py

Beobachten Sie die Ausgabe für die neuen Zeilen:

21.0
18
2
False
0
True
True
32
20

Analysieren wir die Beispiele mit Klammern:

  1. (4 + 4) << 2: Die Klammern um 4 + 4 erzwingen, dass diese Addition zuerst durchgeführt wird, was zu 8 führt. Dann wird 8 << 2 berechnet. Das Verschieben von 8 um 2 Bits nach links ist gleichbedeutend mit der zweimaligen Multiplikation mit 2 (8 _ 2 _ 2), was 32 ergibt.
  2. 4 + (4 << 2): Die Klammern um 4 << 2 erzwingen, dass der bitweise Links-Shift zuerst durchgeführt wird. Das Verschieben von 4 um 2 Bits nach links ist gleichbedeutend mit 4 _ 2 _ 2, was 16 ergibt. Dann wird 4 + 16 berechnet, was zu 20 führt.

Wenn wir die Ausgaben von 1 << 5 - 4 (was 2 war) und den Beispielen mit Klammern vergleichen, können wir sehen, wie Klammern die Auswertungsreihenfolge und damit das Endergebnis ändern.

Die Verwendung von Klammern, auch wenn sie gemäß den Rangfolgeregeln nicht unbedingt erforderlich ist, kann die Lesbarkeit Ihres Codes erheblich verbessern. Sie macht die beabsichtigte Reihenfolge der Operationen explizit und reduziert die kognitive Belastung für jeden, der Ihren Code liest (einschließlich Ihnen selbst in der Zukunft!).

Als bewährte Methode gilt: Wenn Sie komplexe Ausdrücke mit mehreren Operatoren, insbesondere mit gemischten Typen, haben, verwenden Sie Klammern, um die Reihenfolge der Operationen zu verdeutlichen. Dies macht Ihren Code robuster und leichter verständlich.

Zusammenfassung

In diesem Lab haben wir das grundlegende Konzept der Operatorrangfolge (precedence) in Python untersucht, das die Reihenfolge bestimmt, in der Operationen in einem Ausdruck ausgeführt werden. Wir begannen mit der Betrachtung der grundlegenden arithmetischen Rangfolge und beobachteten, wie Python den Standardmathematikregeln folgt, bei denen Multiplikation und Division Vorrang vor Addition und Subtraktion haben, wobei Operationen gleicher Rangfolge von links nach rechts ausgewertet werden.

Anschließend befassten wir uns mit dem Verständnis der Rangfolge bei gemischten Operatoren und lernten, wie verschiedene Operatortypen interagieren und priorisiert werden. Schließlich entdeckten wir die entscheidende Rolle von Klammern bei der Überschreibung von Standard-Rangfolgeregeln, die es uns ermöglicht, die Reihenfolge der Operationen explizit zu steuern und sicherzustellen, dass Berechnungen wie beabsichtigt durchgeführt werden.