Seite 1 von 1
Equivalent zum Ternären Operator
Verfasst: Sonntag 11. Juli 2004, 21:15
von RainBowBender
Hallo,
es scheint einige Leute zu geben, die immer wieder den Ternären Operator von C zu vermissen scheinen und keinen 4 Zeiler wollen.
Hier ist die Einzeilige Lösung:
Also z.B.
gibt "richtig" zurück
gibt "falsch" zurück
Zu beachten ist allerdings, dass hinter dem and oder dem or ein Ausdruck stehen muss, d.h. Funktionen müssen einen Rückgabewert haben.
Verfasst: Montag 12. Juli 2004, 07:37
von Milan
Hi. Nö, ist sie nicht.

Denn wenn falseresult z.B. eine Leere Liste ist gilt diese auch als "falsch" und es wird dementsprechend 0 zurückgegeben. Besser ist es so, dass true- und falseresult immer wahr sind:
Code: Alles auswählen
f=lambda condition,trueresult,falseresult:(condition and [trueresult] or [falseresult])[0]
Es hat halt seine Tücken, dass auch andere Werte flasch sein können

Verfasst: Dienstag 13. Juli 2004, 17:40
von Beyond
Oder halt mein fertiges Module nehmen:
siehe Beitag "Module für ifthenelse und switch"
bzw.
http://www.beyond-thoughts.com/tmp/switch.tar.gz
cu beyond
Verfasst: Samstag 25. September 2004, 11:46
von Dookie
Hi,
ich hatte gestern mal wieder eine Eingebung
Code: Alles auswählen
a = 8
if a < 4:
print "a ist kleiner 4"
else:
print "a ist grösser oder gleich 4"
Kann man auch so erreichen:
Code: Alles auswählen
a = 8
print ("a ist grösser oder gleich 4", "a ist kleiner 4")[a < 4]
bei komplexeren Bedingungen, mit or und and, sollte man den Ausdruck in der eckigen Klammer mit bool(...) explizit in einen Booleanwert wandeln.
Das ganze basiert darauf, daß ein bool ja auch ein int ist mit dem wert 0 oder 1 für False und True. So kann man ihn auch als Index für ein Tuple oder eine Liste verwenden die zwei Einträge hat wobei der erste für False und der 2. für True steht.
Gruß
Dookie
Verfasst: Samstag 25. September 2004, 11:57
von Dookie
Mit der oben gezeigten Vorgehensweise, kann man auch Funktionen bedingt ausführen lassen:
Code: Alles auswählen
def func1(text):
print "func1:", text
def func2(text):
print "func2:", text
a = False
(func1, func2)[a]("Hallo a ist %s" % a)
a = True
(func1, func2)[a]("Halli a ist %s" % a)
ist a False, kann natürlich auch wieder ein Ausdruck sein, der ein Boolean zurückgibt, wird func1 ausgeführt, bei True func1.
Gruß
Dookie