3. Operatoren
Im Ausdruck a = b + c gelten die Zeichen = und + als Operatoren. In diesem Kapitel werden wir uns nun mit den Grundlagen der Operatoren beschäftigen.
3.1. Überblick
Python kennt Operatoren zur Zuweisung von Variablen, zum vergleich von Werten, zur Berechnung mathematischer Ausdrücke usw.
Zu einigen Operatoren folgen im Anschluss an die folgenden Tabellen noch genauere Informationen.
| Operator | Funktion |
| + – | Vorzeichen |
| + – * / | Grundrechenarten; / liefert float-Ergebnisse |
| // | ganzzahlige Division (20 // 6 ergibt 3) |
| % | Rest der ganzzahligen Division (20 % 6 ergibt 2) |
| @ | Matrixmultiplikation |
| ** | Exponentialfunktion bzw. Hocstellen (2**8 ergibt 256). |
| + * | Strings verbinden bzw. vervielfachen(‚ab‘ * 2 ergibt ‚abab‘) |
| % | Zeichenkette formatieren (printf-Syntax) |
| = | Zuweisung (var = 3) |
| += | Zuweisung und Addition (var += 3 entspricht var = var + 3) |
| -= | Zuweisung und Subtraktion |
| *= | Zuweisung und Multiplikation |
| /= | Zuweisung und Division |
| == | Gleichheit testen (if a==3: …) |
| != | Ungleichheit testen |
| < > <= => | kleiner, grösser, kleiner gleich, grösser gleich |
| is | testen, ob zwei Variablen auf dasselbe Objekt zeigen |
| is not | testen, ob zwei verschieden Objekte auf verschiedene Objekte zeigen |
| in | testen, ob ein Element in einer Aufzählung vorhanden ist |
| fmt % data | Daten formatieren |
Tabelle 3.1.: Rechen-, String- und Vergleichsoperatoren
| Operator | Funktion |
| & | | binäres UND und binäres ODER |
| ^ | binäres Exklusiv-Oder |
| ~ | binäres Nicht |
| << | binär nach links schieben (2 << 4 ergibt 32). |
| >> | binär nach rechts schieben (768 >> 2 ergibt 192). |
| or | logisches Oder |
| and | logisches Und |
| not | logisches Nicht |
Tabelle 3.2.: Binäre und logische Operatoren
| Operator | Funktion |
| | | Vereinigung: { 1, 2 } | { 2, 3 } ergibt { 1, 2, 3 } |
| – | Differenz: { 1, 2 } – { 2, 3 } liefert { 1 } |
| & | Schnittmenge: { 1, 2 } & { 2, 3 } liefert 2} |
| ^ | Symmetrische Differenz: { 1, 2 } ^ { 2, 3 } liefert { 1, 3 } |
Tabelle 3.3.: Operatoren für Sets
3.2. Details und Sonderfälle
3.2.1. Division
Der Operator / führt in Python 3 immer eine Fliesskommazahl durch. 6 / 2 liefert 3.0 und nicht die Zahl 3. Wenn Sie explizit eine ganzzahlige Division wünschen, müssen sie den Operator // verwenden
3.2.2. Zuweisung und Berechnung verbinden
Zuweisungen können mit Grundrechenarten verbunden werden. Das heisst a = a + 7 kann auch in der Form a += 7 formuliert werden. Diese Kurzschreibform ist nicht nur für die Grundrechenarten zulässig, sondern für fast alle Python Operatoren.
3.2.3. In Operator
Der Operator in testet, ob ein angegebenes Element in einer Aufzählung enthalten ist (z.B.: in einer Liste, in einem Tupel oder in einem Set) vorhanden ist.
lst = [ 1, 7, 15, 39 ]
7 in lst # ergibt True
8 in lst # ergibt False3.2.4. Binäre versus logische Operatoren
3.2.4.1. Binäre Operatoren
Binäre Operatoren funktionieren wie Rechenoperatoren. Sie bilden aus zwei ganzen Zahlen eine neue ganze Zahl, wobei der jeweilige Operator auf die binären Darstelung der Zahl angewendet wird.
Beispielweise ergibt 27 & 7 den Wert 3. Dieses Ergebnis ergibt sich daraus, dass 27 in binärer Darstellung 11011 entspricht, 7 in Binärform 00111. Der binäre UND Operator testet nun für jede Bitposition, ob beide Ausgabezahlen den Wert 1 aufweisen. Nun lautet das Ergebnis an dieser Stelle 1.
27 entspricht 11011
7 entspricht 00111
3 entspricht 000113.2.4.2. Logische Operatoren
Logische Operatoren dienen dagegen zur Verarbeitung von booleschen Zuständen, also true oder false. Beispielsweise können Sie mit and testen ob 2 Bedingungen gleichzeitig zutreffen.
x = 12
if x>10 and x%2==0:
print('grösser 10 und gerade')3.2.5. Short-Circuit-Evaluation
Die logischen Operatoren and und or unterstützen die gegenannte Short-Circuit-Evaluation, Dabei wird die Auswertung abgebrochen, sobald das Ergebnis feststeht.
- Bei and endet die Auswertung beim ersten false Teilergebnis. Das Gesamtergebnis ist dann zwingend false.
- Bei or endet die Auswertung beim ersten true Teilergebnis. Das Gesamtergebnis ist dann zwingend true.
a = False
b = True
if a and b: ...Wenn a und b nicht einfache Variablen sind, sondern wenn an dieser Stelle komplexe Ausdrücke oder zeitaufwendige Funktionsaufrüfe stehen, dann spart die Short-Circuit-Evaluation Rechenzeit. Gleichzeitig vermeiden Sie die Auswertung von Teilausdrücken, die Fehler verursachen könnten.
a = 3
b = 5
if b != 0 and a/b > 3: ...3.2.6. Operatorhierarchie
Wenn mehrer Operatoren in einem Ausdruck vorkommen, so entscheidet Python aufgrund der Operatorhierarchie welche Werte zuerst ausgewertet werden.
| Operator | Funktion |
| ** | Exponentialoperator |
| +, -, ~ | Vorzeichen und binäres Nicht |
| +, @, /, //, % | Multiplikatoren und Division |
| +, – | Addition und Subtraktion |
| >>, << | Bit-Shift |
| & | Binäres Und |
| ^ | binäres Exklusiv Oder |
| | | binäres Oder |
| in, is, is not, <, >, == … | Vergleichsoperatoren |
| not | logisches Nicht |
| and | logisches Und |
| or | logisches Oder |
Tabelle 3.4.: Operatorenhierarchie (höherwertige Operatoren stehen oben)
Diese Tabelle ist nur eine gekürzte Zusammenfassung der Python Operatorhierarchie. Sie können hier eine vollständige Liste erhalten. https://docs.python.org/3/reference/expressions.html#operator-precedence
3.2.7. Variablen und Daten vergleichen
Wenn Sie zwei Variablen testen wollen, ob Sie gleich sind, können Sie a == b oder a is b ausführen. In diesem Abschnitt versuche Ich Ihnen zu erklären, was Gleichheit bedeutet.
Beginnen wir mit ==: Damit vergleichen Sie Daten bzw. den Inhalt von Objekten. Im nächsten Beispiel werden a und b in derselben Zeichenkette gespeichert. Erwartungsgemäss trifft der Vergleich zu und das Programm gibt aus, das die Zeichenketten übereinstimmen.
a = 'abc'
b = 'abc'
if a == b:
print('Der Inhalt der Variablen a und b stimmen überein.')Im zweiten Beispiel wird wieder in der Variable a eine Zeichenkette gespeichert. Anschliessend wird in b der Inhalt von a zugewiesen. Intern verweisst a und b auf dasselbe Objekt.
a = 'abc'
b = a
if a is b:
print('a und b verweisen auf dasselbe Objekt.')Komplizierter wird das 3. Beispiel. Hier werden zwei Listen gebildet, die identisch sind. Der Vergleich a == b stimmen überein, daher ist dies OK. Der Vergleich a is b trifft aber nicht zu. a und b verweisen auf verschiedene Objekte, die dort gespeicherten Listen wurden daher ganz unterschiedlich gebildet.
a = [ 'a', 'b', 'c' ]
b = [ 'a' ]
b.append('b')
b.append('c')
print(a, b) # Ausgabe: [ 'a', 'b', 'c' ] [ 'a', 'b', 'c' ]
if a == b: # trifft zu
print('Die Listen, auf die a und b zeigen, stimmen überein.')
if a is b: # trifft nicht zu
print('a und b verweisen auf dasselbe Objekt.')3.2.8. Mehrfachvergleiche
Bei den Vergleichsoperatoren <, >, etc. sind auch Mehrfachvergleiche möglich. Beispielsweise testen 10 <= x <= 20, ob x einen Wert zwischen 10 und 20 hat. Intern werden alle Vergleiche mit einem logischen Und verknüpft, d.h. 10 <= x <= 20 entspricht 10 <= x and x <= 20.
3.2.9. operator Modul
Das Modul operator enthält zu allen Python operatoren entsprechende Funktionen.
import operator
operator.mul(operator.add( 2, 3 ), 7 ) # (2 + 3) + 73.3. Wiederholungsfragen
1.) Sie wollen den Rest einer Division 225 / 17 ermittel. Wie gehen Sie vor?
2.) Was ist die Short-Circuit-Evaluation? Nennen Sie ein Beispiel!
3.) Welchen Wert haben a und b?
a = 1 + 2 * 3 ** 4
b = 100 < a < 200