Operatoren in Python¶
Inhalt¶
- Definition
- Vergleichsoperatoren
- Logische Operatoren
- Identitätsoperator
- Teilmengenoperator
- Mathematische Operatoren
- Zuweisungsoperator
Definition ¶
Ein Operator ist zunächst einmal nichts anderes als eine Funktion mit spezieller Notation. Der vollständige Ausdruck eines Operators setzt sich zusammen aus Left-Hand-Side (LHS), Operator und Right-Hand-Side (RHS). Der Operator definiert, was mit LHS und RHS geschieht.
Vergleichsoperatoren ¶
Wie der Name ‚Vergleichsoperator‘ schon sagt, dient diese Operatorenklasse dem Vergleich zweier Werte die Left-Hand-Side und Right-Hand-Side des Operators stehen. In diesem Beispielcode prüfen wir, ob x und y von gleichem Wert sind:
x = 1
y = 2
x == y
>>> FALSE
Achtung: In Python gehen die Vergleichsoperatoren nicht vektorewertig vor. Sollen Beispielsweise alle Werte einer Liste mit einem Werte verglichen werden, kann dies nicht auf diese Weise erfolgen:
[1,2,3] == 3
>>> FALSE
Ein vektorwertiger Vergleich gelingt mit gewohnten Python-Techniken wie List-Comprehensions oder durch die Verwendung des Pakets numpy.
[1,2,3] == 3
[i == 3 for i in [1,2,3]]
>>> [False, False, True]
import numpy as np
list(np.array([1,2,3])==3)
>>> [False, False, True]
Folgende Tabelle listet die Vergleichsoperatoren in Python auf. Um deren Funktionsweise zu demonstrieren, wird für jeden Operator ein vektorwertiger Vergleich anhand von Numpy-Arrays vorgenommen.
Operator |
Beispiel |
Bedeutung |
---|---|---|
== | x = [1,2,3] list(np.array(x)==3) >>>[False, False, True] |
Ist gleich |
!= | x = [1,2,3] list(np.array(x)!=3) >>>[True, True, False] |
Ist ungleich |
> | x = [1,2,3] list(np.array(x)>2) >>>[False, False, True] |
Größer |
< | x = [1,2,3] list(np.array(x)<2) >>>[True, False, False] |
Kleiner |
>= | x = [1,2,3] list(np.array(x)>=2) >>>[False, True, True] |
Größer gleich |
<= | x = [1,2,3] list(np.array(x)<=2) >>>[True, True, False] |
Kleiner gleich |
Logische Operatoren ¶
Logische Operatoren haben grundsätzlich die Funktion, Elementarvergleiche zu verknüpfen. Es existieren 2 logische Operatoren: and und or. Daneben gibt es den Operator not. Ihm kommt die Funktion zu, einen logischen Wert umzudrehen. Mit dem not-Operator erhöht sich damit die Mächtigkeit und die Usability von and und or.
Hier verknüpfen wir 2 logische Vergleiche mit dem logischen und:
(1 == 1) and (2 == 2)
>>> True
Die Klammern sind optional, dienen aber der Lesbarkeit von komplexen logischen Abfragen. Es empfiehlt sich, diese bei der Verwendung von logischen Operatoren stets zu verwenden.
Operator |
Beispiel |
Bedeutung |
---|---|---|
and | (1==1) and (2==2) >>>True(1==1) and (2==3) >>>False |
Und |
or | (1==1) or (2==3) >>>True(1==2) or (2==3) >>>False |
Oder |
not | not (1==1) >>>False(1==1) and not (2==3) >>>True |
Nicht |
Identitätsoperator ¶
Der Operator is prüft, ob zwei Variablen die gleiche Referenz auf ein Objekt aufweisen. Wie wir in dem Beispielcode sehen, ist das Resultat des is-Operators False, wenn lediglich der Wert zweier Variablen gleich ist. Erst wenn 2 Objekte die gleiche Speicherreferenz aufweisen ist das Ergebnis des Vergleichs True.
# Erstellen zweier Variablen
x = 1
y = 1
# Prüfen ob diese identisch sind
x is y
>>> False
# Überschreiben der Variablen x mit y -> die Referenz im Speicher von x und y ist nun dieselbe.
x = y
# Referenz im Speicher von x
id(x)
>>> 556677733562
# Referenz im Speicher von y
id(x)
>>> 556677733562
x is y
>>> True
Achtung Verwechslungssgefahr: Häufig wird der is-Operator bei Python-Beginnern mit dem Vergleichsoperator == verwechselt. Eine Analogie zur Unterschiedung dieser beiden Operatoren lässt sich in der Sprache finden. Wenn wir sagen: Peter hat die gleichen Schuhe wie Paul, meinen wir, dass der Wert der Schuhe der gleiche ist, jedoch nicht, dass sich Peter und Paul ein einziges Paar Schuhe teilen. Wenn wir hingegen sagen, dass Peter und Paul in den selben Urlaubsort fliegen, dann meinen wir eine Sache: Zum Beispiel Paris!
- Der is-Operator entspricht sprachlich dem Selben: Physikalisch ist eine einzige Sache gemeint.
- Der Vergleichsoperator == entspricht dem Gleichen: Dinge, die in mehrfacher Ausführung vorliegen.
x = 1
y = 1
id(x)
>>>556677733562
id(y)
>>>345571238888
x == y
>>>True
Teilmengenoperator ¶
Mit dem Teilmengenoperator in wird überprüft, ob ein Objekt Teilmenge eines anderen Objekts ist. Hier prüfen wir, ob sich der Wert 3 in der Liste [1,2,3] befindet:
3 in [1,2,3]
>>> True
Mit dem logischen Operator not lässt sich das Resultat in das Gegenteil verkehren:
3 not in [1,2,3]
>>> False
Achtung Fehlergefahr: Auch wenn die Schreibweise not in nah am natürlichen Sprachgebrauch ist, ist dieses Kontrukt mit einem Fallstrick versehen. Bei der Verwendung von not in Kombination mit den logischen Operatoren and und or wird not an die zweite Position gesetzt. In Kombination mit dem Teilmengenoperator steht das not an erster Stelle.
not in
and not
or not
Mathematische Operatoren ¶
Die mathematischen Operatoren entsprechen den implementierungen vieler anderer Programmiersprachen. Folgende Tabelle liefert eine Übersicht:
Operator |
Beispiel |
Funktionsweise |
---|---|---|
+ | 1 + 2 >>>3 |
Addition |
– | 2 – 1 >>>1 |
Subtraktion |
\* | 2 \* 3 >>>6 |
Multiplikation |
/ | 9 / 3 >>>3 |
Division |
\*\* | 2 \*\* 3 >>>8 |
Exponentation |
// | 11 // 3 >>312 // 3 >>>4 |
Ganzzahldivision (Division ohne Rest) |
% | 10 % 3 >>>1 |
Modulo-Division (Rest einer Division) |
Zuweisungsoperator ¶
Zuweisungen erfolgen in Python mit dem Gleichheitszeichen. Wir speichern also den Wert in einem Objekt, indem wir Links des Gleichheitszeichens einen Namen vergeben, auf den der Objektinput gerichtet ist. In dem Beispielcode wird ein Objekt x erstellt, dass den Wert 1 erhällt. Wir können hier auch sagen: Dem Objekt x wird der Wert 1 zugewiesen.
x = 1
In Python lässt sich eine Zuweisung auch in Kombination mit einigen mathematischen Operatoren durchführen. Ganz allg. wird in der Informatik von Inkrement gesprochen, wenn einem Wert der Wert 1 zuaddiert wird. Von Dekrement wird gesprochen, wenn der Wert 1 abgezogen wird. In Python ist das Inkrement bzw. Dekrement derart umgesetzt:
x = 5
x += 1
>>> 6
x -= 1
>>> 4
Analog dazu, können andere mathematische Operatoren mit dem Zuweisungsoperator kombiniert werden:
x *= 2
>>> 10
x /= 2
>>> 2.5
x //= 2
>>> 2
Die beschriebene Technik mathematische Operatoren mit dem Zuweisungsoperator zu kombinieren ist nicht nur elegant, sondern auch schnell. Halten wir uns die beiden möglichen Schreibweisen der Inkrementierung vor Augen:
x = x+1
x += 1
Die zweite Implementierung erfragt das Objekt x nur einmalig aus dem Speicher und ist dadurch effizienter.