Die Semantik des if-Ausdrucks in Python
Die Auswertung des mittleren Ausdrucks
- Aufbau eines if-Ausdrucks
.------------. .--. .-----------. .----. .-------------.
--->| Ausdruck |--->( if )--->| Ausdruck |--->( else )--->| Ausdruck |--->
'------------' '--' '-----------' '----' '-------------'
Bei der Auswertung des if-Ausdrucks wird zuerst der mittlere Ausdruck ausgewertet.
- Protokoll
print( 0 )if print( 1 )else print( 2 )
1
2
Die Auswertung der äußeren Ausdrücke
Wenn die Wandlung des Wertes des mittleren Ausdrucks nach »bool« (wie mit dem aufrufbaren Objekt »bool«, siehe Lektion 14.1.), den Wahrheitswert »True« ergibt, wird der erste Ausdruck ausgewertet, und der Wert des gesamten if-Ausdrucks ist dann der Wert des ersten Ausdrucks ; sonst wird der letzte Ausdruck ausgewertet, und der Wert des gesamten if-Ausdrucks ist dann der Wert des letzten Ausdrucks .
»if x« bedeutet also »if bool( x )« (siehe Lektion 14.1.).
Hier einige einfache Beispiele:
- Protokoll
2 + 3 if True else 3 + 4
5
- Protokoll
9 if 12 else 23
9
- Protokoll
9 if -2 else 23
9
- Protokoll
9 if 'False' else 23
9
- Protokoll
9 if False else 23
23
- Protokoll
9 if 0 else 23
23
Wir nennen den ersten Ausdruck auch Konsequenz , den zweiten Bedingung und den letzten Alternative.
- Aufbau eines if-Ausdrucks
.------------. .--. .-----------. .----. .-------------.
--->| Ausdruck |--->( if )--->| Ausdruck |--->( else )--->| Ausdruck |--->
'------------' '--' '-----------' '----' '-------------'
Konsequenz Bedingung Alternative
Vergleich mit der Interpolation
In einigen Fällen kann man mit einer Interpolation dieselben Ergebnisse erzielen wie mit einem if-Ausdruck.
- Unter einer „Interpolation“ verstehen wir hier eine Summe zweier Produkte, wobei das erste Produkt eine Variable x nur als Faktor x enthält und das zweite nur als Faktor (1-x), also beispielsweise einen Ausdruck wie x*A+(1-x)*B.
- Konsolenprotokoll
x = True
'A' * x +( 1 - x )* 'B'
'A'
'A' if x else 'B'
'A'
x = False
'A' * x +( 1 - x )* 'B'
'B'
'A' if x else 'B'
'B'
Da die Interpolation jedoch auch nicht benötigte Werte ermittelt und der if-Ausdruck für einige als verständlicher erscheint, sollte der if-Ausdruck in solchen Fällen bevorzugt werden,
Übungsfragen
? Übungsfrage 0 ⃖
Was ist die Ausgabe des folgenden Programms (also der folgenden Eingabe in die Python -Implementation)?
- Programm
None if print( 'abc' ) else None
? Übungsfrage 1
Was ist der Wert von »9 if True else 23«?
? Übungsfrage 2
Was ist der Wert von »12 if 0 != 0 else 17«?
? Übungsfrage 3
Was ist der Wert von »'c' +( 'd' if 2 == 2 else 'e' )+ 'f'«?
? Übungsfrage 4
Was ist die Ausgabe des folgenden Programms?
main.py
def f(): print( 'a' ); return 0
def g(): print( 'b' ); return 1
def h(): print( 'c' ); return 2
print( f() if g() else h() )