Equivalent zum Ternären Operator

Code-Stücke können hier veröffentlicht werden.
RainBowBender
User
Beiträge: 53
Registriert: Dienstag 6. April 2004, 10:33

Equivalent zum Ternären Operator

Beitragvon RainBowBender » Sonntag 11. Juli 2004, 21:15

Hallo,

es scheint einige Leute zu geben, die immer wieder den Ternären Operator von C zu vermissen scheinen und keinen 4 Zeiler wollen.

Code: Alles auswählen

if condition:
    a = trueresult
else:
    a = falseresult


Hier ist die Einzeilige Lösung:

Code: Alles auswählen

condition and trueresult or falseresult

Also z.B.

Code: Alles auswählen

3==3 and "richtig" or "falsch"

gibt "richtig" zurück

Code: Alles auswählen

3==4 and "richtig" or "falsch"

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.
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Montag 12. Juli 2004, 07:37

Hi. Nö, ist sie nicht. :wink: 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 :wink:
Benutzeravatar
Beyond
User
Beiträge: 227
Registriert: Freitag 6. September 2002, 19:06
Kontaktdaten:

Beitragvon Beyond » Dienstag 13. Juli 2004, 17:40

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
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Samstag 25. September 2004, 11:46

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

Code: Alles auswählen

#!/usr/bin/env python
import this
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Samstag 25. September 2004, 11:57

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

Code: Alles auswählen

#!/usr/bin/env python
import this

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder