[Python-de] ternärer operator
Diez B. Roggisch
deets at web.de
Die Dez 14 15:09:41 CET 2004
> gibt es in python einen ternären operator?
>
> my_var = var1 > var2 ? 0 : 1;
Das wird Diskussionen auslösen....
Es gibt einige Möglichkeiten, sowas zu erreichen, zb so:
my_var = [1,0][var1 > var2]
Das klappt, weil True und False auch als Indizes zu 0 oder 1 werden. Falls man
sowas will:
my_var = [1,0][15]
also für einen Wert was zurückgeben abhähngig davon, ob der dann grösser 0 ist
oder nicht, kann man das dann so umwandeln:
my_var = [0,1][not 15]
Nachteil beider Methoden: die Werte der Liste werden immer ausgewertet - egal,
ob sie dann benötigt werden oder nicht.
Darum kann man das auch mit den nicht-strikten boolschen Operatoren machen, da
python da eine Besonderheit hat: Das Ergebnis von
a or b
ist a, falls a wahr ist, b sonst.
Ähnliches gilt für and.
Damit klappt dann sowas hier:
var1 > var2 and 1000 or 2000
Aber achtung: Mit deinen Zahlen gehts _nicht_, denn 0 ist falsch, und dann
wäre das trotz var1 > var2 nicht 0, sonder 1.
Man muß also genau wissen, was man da tut.
Allgemein lässt sich sagen: An einem vernünftigen if ist noch keiner
gestorben.
Diez