Operatoren#

Arithmetische Operatoren#

Operatoren werden in Programmiersprachen verwendet um zwei oder mehrere Werte oder Variablen miteinander zu verknüpfen. Die arithmetischen Operatoren *, -, *, / aus der Mathematik gibt es auch in Python.

a = 1 + 1
print(a)
2

Die Operationen funktionieren genauso mit Variablen oder gemischt.

a = a + 1
print(a)
3

In diesem Beispiel ist die erste Eingangsvariable a identisch mit der Ergebnisvariable. In diesem Fall bietet Python auch die Kurzform an wo der Operator vor dem Zuweisungsoperator =

a += 1
print(a)
4
a *= 2
print(a)
8

Hierbei bestimmen Klammern auch die Berechnungsreihenfolge, genauso wie in der Mathematik und können das Ergebnis beeinflussen. So, sind die folgenden beiden Ausdrücke nicht identisch:

c1 = (6 + a) * (-2)
print(c1)
-28
c2 = 6 + a * -2
print(c2)
-10

Logische Operatoren#

Um zu prüfen, ob der Wert zweier Variablen gleich ist, wird in den meisten Programmiersprachen nicht das Gleichheitszeichen = verwendet, das es dort meist als Zuweisungsoperator definiert ist (und somit die erste Variable überschreiben würde). In Python nutzt man deshalb ein doppeltes Gleichheitszeichen == (mathematisch für exakt das gleiche). In unserem Beispiel ist c1 nicht gleich c2, also die folgende Aussage falsch.

c1 == c2
False

Für Ungleichheit wird in Python der != Operator verwendet

c1 != c2
True

Auch die mathematischen Operatoren für kleiner <, kleiner gleich , größer <, und größer gleich werden unterstützt

c1 < c2
True
c1 <= c2
True
c1 > c2
False
c1 >= c2
False

Boolesche (logische) Werte werden in Python nicht durch die üblichen Operatoren für UND &, ODER |, NOT ~ kombiniert, sondern als and, or, not ausgeschrieben. Das Größergleich ist z.B. identisch mit der Bedingung

c1 > c2 or c1 == c2
False

Bitweise Operatoren#

Die üblichen logischen Operatoren UND &, ODER |, sowie XOR ^ sind für bitweise Verknüpfung reserviert. Dies benutzt man nur sehr selten, bei bestimmten Berechnungen oder beim Masking.

a = 10 # binär 1010
b = 4  # binär 0100
c = a & b
print(c) # binär 0000
0
c = a | b
print(c) # binär 1110
14

Mit den Linksverschiebungs- << und Rechtsverschiebungs-Operatoren >> lassen sich auch sehr schnelle Berechnungen realisieren. Eine Multiplikation mit 4 ist zum Beispiel eine Linksverschiebung um 2, eine Division um 4 hingegen eine Rechtsverschiebung um 2. Dies nuten Compiler intern, um Berechnungen zu optimieren.

c = a << 2
print(c)
40
d = c >> 2
print(d)
10

Überladen von Operatoren#

Die arithmetischen Operatoren + und - sind in Python überladen, d.h. man kann sie auch auf nicht numerische Datentypen anwenden. Um mehrere Strings zu verbinden kann man zum Beispiel schreiben:

satz = "Der "+ "Ball " + "ist " + "rund."
print(satz)
Der Ball ist rund.

Dies funktioniert auch für Listen

liste1 = [1,2,3]
liste2 = [2,3,4]

liste12 = liste1 + liste2
print(liste12)
[1, 2, 3, 2, 3, 4]

oder als Subtraktion für Mengen

menge1 = {1,2,3}
menge2 = {2,3,4}

menge12 = menge1 - menge2
print(menge12)
{1}

Note

Hierbei ist zu beachten, dass die Operatoren ihre semantische Bedeutung ändern, je nachdem welche Datentypen kombiniert werden. So ist die Addition zweier Strings str formal eine concat in einen neuen String. Bei der Liste bedeutet + das Kopieren der ersten Liste in eine neue, welche dann mit expand um den Inhalt der nächsten Liste erweitert wird. Bei beiden ist der Operator für die Subtraktion - nicht definiert. Bei einem Set ist + nicht definiert, dafür aber - um Differenzmenge zu bestimmen.

Ferner müssen bei Python beide verknüpften Werte immer den gleichen Datentypen haben. So kann man nicht, wie in Java oder JavaScript, ein String und eine Nummer kombinieren, sondern muss die Nummer zuerst in einen String konvertieren (casting).

"Der Wert ist " + 1  # geht nicht
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[22], line 1
----> 1 "Der Wert ist " + 1  # geht nicht

TypeError: can only concatenate str (not "int") to str
"Der Wert ist " + str(1)  # geht
'Der Wert ist 1'

Dies hat damit zu tun, dass bestimmte Statements sonst mehrdeutig wären. So ist hier unklar, ob das Ergebnis ein String sein soll oder eine Zahl.

"1" + 1  # geht nicht
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[24], line 1
----> 1 "1" + 1  # geht nicht

TypeError: can only concatenate str (not "int") to str

Durch Casting der Werte in den richtigen Typ wird das Statement eindeutig

int("1") + 1  # geht
2