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.

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.

Kein x++ oder x- –

In anderen Programmiersprachen sind Ausdrücke wie x++ oder x– im Sinne von x = x + 1 oder x = x – 1 erlaubt. Dieses ist in Python nicht vorgesehen.

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 False

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

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

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) + 7

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