[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