Equivalent zum Ternären Operator

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

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

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:
Beyond
User
Beiträge: 227
Registriert: Freitag 6. September 2002, 19:06
Kontaktdaten:

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

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]#!/usr/bin/env python
import this[/code]
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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]#!/usr/bin/env python
import this[/code]
Antworten