A if C else B
Was haltet Ihr davon ? Einige Leute stehen dem ja recht negativ gegenüber
Als doch an eine andere Syntax gewöhnter Programmierer habe ich so etwas bisher schmerzlicht vermisst.
Ich finde das gut.
Besser jedenfalls als so etwas:
A = 1 and C or B
http://www.amk.ca/diary/2005/09/conditional_expression
Neue Condition expression in python 2.5
Ich find's nicht so toll. Was mich am meisten daran stört ist, das die Abarbeitungsreihenfolge nicht der geschriebenen entspricht. Erst wird C ausgewertet und dann A oder B.
Nun sind wir so lange ohne diese Funktionalität ausgekommen. Ich finde ehrlich gesagt
nicht wirklich schlimm.
Nun sind wir so lange ohne diese Funktionalität ausgekommen. Ich finde ehrlich gesagt
Code: Alles auswählen
if C:
x = A
else:
x = B
Das finde ich zu lang. Man kann somit nicht eben mal einen Ausdruck in einer Zeile auswerten.
Ich hatte mal so etwas irgendwo gesehen.
X= ifelse(A,B,C)
Wurde irgendwie mit lambda's gemacht..
fand ich eigentlich auch eine recht gute Idee.
Felix
Ich hatte mal so etwas irgendwo gesehen.
X= ifelse(A,B,C)
Wurde irgendwie mit lambda's gemacht..
fand ich eigentlich auch eine recht gute Idee.
Felix
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
ich mach immer so:
Und lebe gut damit. Und das gefällt mir noch besser als die neue Syntax.
Was spräche denn gegen sowas?
Code: Alles auswählen
arglist = [
re.compile(pattern[0]),
pattern[1],
(len(pattern) > 2) and pattern[2] or {}
]
Was spräche denn gegen sowas?
Code: Alles auswählen
C = expression then "blub" else "blub"
TUFKAB – the user formerly known as blackbird
@leobm:
X = ifelse(A,B,C) ist ne akzeptable Lösung, aber:
- man sollte es wenn schon ifelse_(A,B,C) nennen (style guide: wenn man keywords mit funktionen nachahmt, mit nem unterstrich beenden)
- Bei einem Funktionsaufruf werden immer alle 3 Parameter ausgewertet (es gibt keinen "short-circuit"). Das kann in manchen Situationen unerwünscht sein.
Btw. kann man ds auch ohne die stilistisch fragwürdigen lambdas machen:
Ich finde auch "A then B else C" in jedem Fall schöner als "A if B else C", aus den o.g. Gründen. Ersteres ist auch insgesamt der vernünftigste Vorschlag im PEP zu dem Thema.
X = ifelse(A,B,C) ist ne akzeptable Lösung, aber:
- man sollte es wenn schon ifelse_(A,B,C) nennen (style guide: wenn man keywords mit funktionen nachahmt, mit nem unterstrich beenden)
- Bei einem Funktionsaufruf werden immer alle 3 Parameter ausgewertet (es gibt keinen "short-circuit"). Das kann in manchen Situationen unerwünscht sein.
Btw. kann man ds auch ohne die stilistisch fragwürdigen lambdas machen:
Code: Alles auswählen
def ifelse_(cond, r_if, r_else=None):
if cond:
return r_if
return r_else
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
@blackbird: Deine erste Variante finde ich ausgesprochen hässlich.
Das ist z.B. ein OCaml code der mir für Python gefallen würde.
Wie auch immer, ich muss ehrlich sagen, dass ich bis jetzt in Python sehr gut ohne diese Syntax ausgekommen bin. Mir wärs lieber wenn sich die Entwickler endlich mal um die Module kümmern (aber das haben wir ja schon mal besprochen).
Gruß, mawe
@blackbird: Deine erste Variante finde ich ausgesprochen hässlich.
Code: Alles auswählen
let max a b = if a > b then a else b
Wie auch immer, ich muss ehrlich sagen, dass ich bis jetzt in Python sehr gut ohne diese Syntax ausgekommen bin. Mir wärs lieber wenn sich die Entwickler endlich mal um die Module kümmern (aber das haben wir ja schon mal besprochen).
Gruß, mawe
Du hast recht, an sich ist das netterer Code, das if am Anfang kann bloß zu Mißverständlichkeiten mit dem "alten" if: führen, aus dem selben Grund wird auch durchaus überlegt, sogar das "else" zu vermeiden. Aber das idt vielleicht echt ein bisschen korinthenkackerei.mawe hat geschrieben:Hi!
@blackbird: Deine erste Variante finde ich ausgesprochen hässlich.
Das ist z.B. ein OCaml code der mir für Python gefallen würde.Code: Alles auswählen
let max a b = if a > b then a else b
Was meinst du mit um die Module kümmern?
Gehts um das mehrzeilige import?
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Wir haben ja einmal darüber gesprochen, dass z.B. einige Funktionen aus dem os Modul eigentlich besser bei shutil aufgehoben wären. Solche Dinge hab ich gemeint.henning hat geschrieben: Was meinst du mit um die Module kümmern?
Gehts um das mehrzeilige import?
Wenn ich mir die verschiedensten Blogs zum Thema "neue Python Version" durchlese, scheine ich auch nicht der einzige zu sein, dem das wichtiger ist als neue Syntay einzuführen
Code: Alles auswählen
Foo = 42 if Bar<12 else 23
Code: Alles auswählen
if Bar<12:
Foo = 42
else:
Foo = 23
Edit: OK, das ganze ist ein vollwertiger ?:-Clone. Dann macht das Sinn, wenn man auch sowas schreiben kann:
Code: Alles auswählen
foo = Bar(jede, menge, [parameter, und, noch], ein, paar, mehr, 24 if Baz else 9)
Hi!
Das ist aber nichts für Versionen < Python3000. Das gäbe ein ziemliches durcheinander.
joe
mawe hat geschrieben:Wir haben ja einmal darüber gesprochen, dass z.B. einige Funktionen aus dem os Modul eigentlich besser bei shutil aufgehoben wären.
Das ist aber nichts für Versionen < Python3000. Das gäbe ein ziemliches durcheinander.
joe
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Was haltet ihr eigentlich davon (Infix is aus dem Cookbook)
Gruß, mawe
Was haltet ihr eigentlich davon (Infix is aus dem Cookbook)
Code: Alles auswählen
class Infix:
def __init__(self, function):
self.function = function
def __ror__(self, other):
return Infix(lambda x, self=self, other=other: self.function(other, x))
def __or__(self, other):
return self.function(other)
def __call__(self, value1, value2):
return self.function(value1, value2)
def lala(value, lst):
if lst[0]: return value
else: return lst[1]
when = Infix(lala)
c = 4
d = "greater" |when| (c>3, "smaller")
print d
Na und?leobm hat geschrieben:Das finde ich zu lang. Man kann somit nicht eben mal einen Ausdruck in einer Zeile auswerten.
Nein `ifelse` ist schon okay. Es geht im Styleguide nicht um das Nachahmen von Schlüsselwörtern sondern was man machen soll, wenn man ein Schlüsselwort als Namen verwenden will.henning hat geschrieben:@leobm:
X = ifelse(A,B,C) ist ne akzeptable Lösung, aber:
- man sollte es wenn schon ifelse_(A,B,C) nennen (style guide: wenn man keywords mit funktionen nachahmt, mit nem unterstrich beenden)
Wenn Du nicht möchtest das die Argumente `r_if` und `r_else` vor dem Aufruf ausgewertet werden , dann brauchst Du doch wieder ``lambda`` oder ein Closure um die Argumente. In dem Beispiel wären die Parameternamen übrigens ein Beispiel für den Unterstrich: Man hätte hier `if_` und `else_` nehmen können.Btw. kann man ds auch ohne die stilistisch fragwürdigen lambdas machen:Code: Alles auswählen
def ifelse_(cond, r_if, r_else=None): if cond: return r_if return r_else
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Wenn Python 3000, ahem 3.0 überhaupt so revolutionär wird.joe hat geschrieben:mawe hat geschrieben:Wir haben ja einmal darüber gesprochen, dass z.B. einige Funktionen aus dem os Modul eigentlich besser bei shutil aufgehoben wären.
Das ist aber nichts für Versionen < Python3000. Das gäbe ein ziemliches durcheinander.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice