ich hab's mit ein paar Tricks hinbekommen ein Module für ifthenelse und switch zu schreiben.
Die ganze Evaluation funktioniert korrekt (denke ich zumindest -- testet es ruhig) d.h. die Expressions werden erst bei Bedarf ausgewertet (wie es sein soll!)
Ich finde die Schreibweise mit diesem Modul übersichtlicher als mit den "... and ... or ..."-Tricks.
result= SWITCH(
iff(True) > then > "Yeah",
iff(False) > then > "Never",
iff(False) > then > testprint("this won't be called"),
iff(True) > then > testprint("check this out"))
Noch was:
Ich habe beim Anhängen der LGPL die Angabe für den Interpreter (bei Linux und Co) kaputt gemacht. Man braucht also zum Ausführen
"python ./__init__.py"
Lassen sie sich --- aber es ist mehr Schreibarbeit (ich optimiere das Ganze wohl noch etwas).
if:
else:
sind außerdem Statements mit dem Modul hast Du eine Expression (ternary)
Nützlich z.B. wenn Du einen Funktionsaufruf mit einem von ifthenelse-abhängigen Argument machen willst.
Das ist dann aber schon wieder ein Statemant, da es (vorher) eine Zuweisung gibt. Gesucht ist eine expression, die dann ja auch z.B. in lambdafunktionen benutzt werden kann:
Wichtig dabei ist außerdem und das klappt leider bei den ganzen Dictionary etc. Geschichten nicht, daß nur die (sub-)expression ausgewertet wird, die wirklich benötigt wird.
Die Funktion "testprint" in meinem Beispiel gibt den String auch aus --- das ist ein Seiteneffekt, der nur für den zutreffenden Fall auftreten darf.
In Python geht das IMO nur mit lambdas (das wird aber krass ...) oder mit Operatoren die eigentlich Bools liefern und die Auswertung vorzeitig abbrechen z.B. and, or, <, >
Bei den Code von Milan kann man z.B. einen möglichen (hier ist es so richtig) Fehler erkennen.
Falls z.B. im Fall a==2 nicht "Yeah" kommt sondern z.B. 0 dann wird das ganze weiter ausgewertet und 0 eben nicht als Ergebnis geliefert!
Man kann das Ganze dann noch in Tuple verpacken (diese sind True) und anschließend wieder entpacken, dann siehts total übersichtlich aus...
Beyond hat geschrieben:Bei den Code von Milan kann man z.B. einen möglichen (hier ist es so richtig) Fehler erkennen.
Falls z.B. im Fall a==2 nicht "Yeah" kommt sondern z.B. 0 dann wird das ganze weiter ausgewertet und 0 eben nicht als Ergebnis geliefert!
Man kann das Ganze dann noch in Tuple verpacken (diese sind True) und anschließend wieder entpacken, dann siehts total übersichtlich aus...
siehe hier Der Trick dabei ist, das durch die nicht leere Liste ein eventuell "falscher" Wert bei der logischen Verknüpfung richtig ist. Extrem geschachtelt eventuell unübersichtlich, aber es hält sich in Grenzen... Sowas ist ja auch nur für Sachen, in denen man wirklich nur eine expression statt einem if Verwenden darf, z.B. bei kleinen lambda's für Tkinter Buttons...