Operatoren in Python

https://oer-informatik.de/python_operatoren

tl/dr; (ca. 6 min Lesezeit): Es gibt eine ganze Reihe Operatoren für Zahlen in Python: die aritmetischen Operatoren, Vergleichsoperatoren, Zuweisungsoperatoren, bitweise Operatoren… Und dann gibt es noch die Ausführungsreihenfolge. Was in aller Welt ergibt denn zahl = 2**4-4%3>0b100<<2?!?

Operatoren bei Zahlentypen

Python bietet für Zahlentypen die üblichen arithmetischen Operatoren. Es werden die gleichen Operatoren verwendet, wie in den meisten Programmiersprachen (vielleicht mit Ausnahme der Exponentialfunktion **):

Operator Name Beispiel
a+b Addition 10+5
a-b Subtraktion 10-5
a*b Multiplikation 10*5
a/b Division (Ergebnis immer float) 10/5
a//b Ganzzahlige Division (“Ergebnis abgerundet”) 10//6
a%b Modulo (Rest bei a//b) 10%6
a**b Exponentialfunktion (“hoch”) 2**10

Bei den aritmethischen Operationen können in der Regel die beiden Zahlentypen int (Ganzzahl) und float (Gleitkommazahl) kombiniert werden. Hierbei gilt die Regel: Sollte an der Operation ein float beteiligt sein oder eine Division vorkommen, so ist das Ergebnis ein float. Sind alle Operanden int, so ist auch das Ergebnis int (Ausnahme: Division /):

Per int() und float() lassen sich die Zahlen-Datentypen ineinander umwandeln (casten).

Wahrheitswert

Wahrheitswerte speichern die binäre Zustände: wahr oder falsch (0 oder 1, Elektrotechnik: HIGH oder LOW). Sie werden in Variablen des Datentyps bool gespeichert und mit den Literalen True und False notiert. In der Regel werden sie über Vergleichsoperatoren gebildet.

Beispiel

Vergleichsoperatoren zur Bestimmung von Wahrheitswerten

Wahrheitswerte werden häufig mit Hilfe von Vergleichen erzeugt. Hierzu können die folgenden Vergleichsoperatoren genutzt werden.

Operator Name Beispiel
>, >= Zahlenwerte größer (… gleich) 10.0>5
<, <= Zahlenwerte kleiner (… gleich) 7 <= 5
==, != Wertgleichheit, Wertunterschiedlichkeit 7==5
is, is not selbes Objekt, unterschiedliches Objekt datei1 is datei2
in, not in Element in Objektsammlung oder String vorhanden 5 in (1,2,3,4)

Logische Operatoren zur Verknüpfung von Wahrheitswerten

Wahrheitswerte lassen sich miteinander kombinieren. Hierbei kann die Ausführungsreihenfolge über Klammern bestimmt werden. Werden keine Klammern gesetz, so wird zuerst not, dann and, dann or ausgeführt.

Operator Name Beispiel
and logisches UND 4>3 and 7>5
or logisches ODER 1>3 or 7>5
not logisches NICHT not 1>3

Logische Operatoren und None

Besonderes Augenmerk sollte bei logischen Vergleichen darauf gerichtet sein, wenn eine der Variabeln keinen Wert aufweist, sie also ein None-Objekt ist. Hierbei gelten die folgenden Regeln:

a a and None a or None
True None True
False False None
None None None

not None entspricht True

Bitweise Operatoren

In Python können nicht nur die Arithmetischen Operatoren für Dezimalzahlen genutzt werden, wir können auch direkt Binärzahlenoperationen vornehmen. Die einfachsten Operationen sind hier die Verschiebung der Bitfolge nach rechts oder links. Beim Verschieben nach rechts geht dabei die Stelle ganz rechts verloren.

Operator Name Beispiel
>> Bit-Shiften um angegebene Stellen nach rechts bin(0b00001000>>1) == '0b00000100'
bin(0b00001000>>2) == '0b00000010'
<< Bit-Shiften um angegebene Stellen nach links bin(0b00001000<<1) == '0b00010000'
bin(0b00001000<<2) == '0b00100000'
& bitweises UND bin(0b11110000 & 0b01010101) == '0b1010000'
| bitweises ODER bin(0b11110000 | 0b01010101) == '0b11110101'

Das Bitweise UND und ODER verleicht jede einzelne Stelle der Binärzahl mit der jeweiligen Stelle der zweiten Binärzahl. Diese Operation wird beispielsweise in Netzwerken beim Subnetting durchgeführt, um die Netzadresse zu erhalten.

Zuweisungs-Operatoren

In Python können nicht nur die Arithmetischen Operatoren für Dezimalzahlen genutzt werden, wir können auch direkt Binärzahlenoperationen vornehmen. Die einfachsten Operationen sind hier die Verschiebung der Bitfolge nach rechts oder links. Beim Verschieben nach rechts geht dabei die Stelle ganz rechts verloren.

Operator Name Beispiel
= Zuweisung zahl = 1
+= Zuweisungsinkrement
Zahl benötig vorher Wertzuweisung
Vorheriger Wert wird um den Wert auf der rechten Seite erhöht.
zahl = 1
zahl += 2
zahl: 3
-= Zuweisungsdekrement
Zahl benötig vorher Wertzuweisung
Vorheriger Wert wird um den Wert auf der rechten Seite vermindert.
zahl = 5
zahl -= 2
zahl: 3
*= Zuweisungsprodukt
Zahl benötig vorher Wertzuweisung
Vorheriger Wert wird mit dem Wert auf der rechten Seite multipliziert.
zahl = 2
zahl *= 3
zahl: 6
/= Zuweisungsdivision
Zahl benötig vorher Wertzuweisung
Vorheriger Wert wird durch den Wert auf der rechten Seite geteilt.
zahl = 24
zahl /= 6
zahl: 4.0
**= Zuweisungspotenzierung
Zahl benötig vorher Wertzuweisung
Vorheriger Wert wird mit dem Wert auf der rechten Seite potenziert.
zahl = 9
zahl **= 2
zahl: 81
//= Ganzzahlige Zuweisungsdivision
Wie Zuweisungsdivision, nur ganzzahlig.
zahl = 30
zahl //= 7
zahl: 4
%= Zuweisungsmodulo
Wie Zuweisungsdivision, nur ganzzahliger Rest wird zugewiesen.
zahl = 30
zahl %= 7
zahl: 2

Reihenfolge in der Operatorauswertung

Werden nicht Auswertungsreihenfolgen durch Klammerung festgelegt, so wertet Python in der folgenden Reihenfolge die Operatoren aus:

  1. Exponentialfunktion (**)
  2. Vorzeichen (+/-)
  3. “Punkt vor Strich” 3a. Multiplikation/Division (*, /, //) 3b. Addition und Subtraktion (+, -)
  4. binäre Operatoren (BitShift >>, <<, binäres und/oder &, |)
  5. Vergleichsoperatoren (>, <, >=, <, is, in, ==, !=)
  6. logische Operatoren (erst not, dann and, zuletzt or)
  7. Zuweisungsoperatoren (=, +=, -=, *=, /=, **=, //=, %=)

Fazit

Neben den arithmetischen Operatoren und Vergleichs- und Zuweisungsoperatoren gibt es noch eine ganze Reihe mehr oder weniger skurriler weiterer Möglichkeiten. Im Gegensatz zu vielen Programmiersprachen fehlen die Inkrement-Operatoren (i++, ++i), wir müssen hier ein Zeichen mehr investieren: i+=1. Wichtig bei alledem: wenn wir uns bei der Ausführungsreihenfolge nicht ganz sicher sind, dann lohnt es, clever Klammern zu setzen. Ich jedenfalls müsste erstmal die obige Liste suchen, um vorhersagen zu können, welchen Wert zahl hier hat:

zahl = 2**4-4%3>0b100<<2

(Spoiler: True)

Mit einem sicheren Verständnis für Datentypen und Operatoren können wir uns jetzt auf das nächste Thema stürzen: alternative Kontrollstrukturen.

Quellen und offene Ressourcen (OER)

Die Ursprungstexte (als Markdown), Grafiken und zugrunde liegende Diagrammquelltexte finden sich (soweit möglich in weiterbearbeitbarer Form) in folgendem git-Repository:

https://oer-informatik.gitlab.io/python-basics/erste-schritte-mit-python.

Sofern nicht explizit anderweitig angegeben sind sie zur Nutzung als Open Education Resource (OER) unter Namensnennung (H. Stein, oer-informatik.de) freigegeben gemäß der Creative Commons Namensnennung 4.0 International Lizenz (CC BY 4.0).

Creative Commons Lizenzvertrag


Hinweis zur Nachnutzung

Dieses Werk und dessen Inhalte sind - sofern nicht anders angegeben - lizenziert unter CC BY 4.0. Nennung gemäß TULLU-Regel bitte wie folgt: “Erste Schritte mit Python” von Hannes Stein, Lizenz: CC BY 4.0. Die Quellen dieses Werks sind verfügbar auf GitLab.

Kommentare gerne per Mastodon, Verbesserungsvorschläge per gitlab issue (siehe oben). Beitrag teilen: