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