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 /
):
>>> type(25/5)
<class 'float'>
>>> type(25*5)
<class 'int'>
>>> type(25*5.0)
<class 'float'>
>>> type(25//5)
<class 'int'>
>>> type(25.0//5)
<class 'float'>
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:
- Exponentialfunktion (
**
) - Vorzeichen (
+
/-
) - “Punkt vor Strich” 3a. Multiplikation/Division (
*
,/
,//
) 3b. Addition und Subtraktion (+
,-
) - binäre Operatoren (BitShift
>>
,<<
, binäres und/oder&
,|
) - Vergleichsoperatoren (
>
,<
,>=
,<
,is
,in
,==
,!=
) - logische Operatoren (erst
not
, dannand
, zuletztor
) - 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).
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.