Operatoren in Python

Inhalt

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.

Python-Vergleichsoperatoren im Überblick:

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.

Logische Operatoren im Überblick:

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:

Mathematische Operatoren im Überblick:

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
>>>3

12 // 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.

Leave a Comment