Mat
Aktives Mitglied
Ich wollte gucken, wie ich in Python den ternären Operator schreiben kann und das dann in meine Notizen übertragen.
Dabei bin ich auf die Tupel- und Dictionary-Varianten gestoßen. Und die werden natürlich erstmal komplett ausgewertet, unabhängig davon, welchen Wahrheitswert man kriegt. Wenn man sich das angewöhnt und irgendwann rechenintensive Funktionen hat, ist das sicher ein ganz schöner Stolperstein und Flaschenhals. Deswegen fällt mir keine gute Einsatzmöglichkeit ein.
Sind die sinnvoll einsetzbar oder sollte man sie grundsätzlich vermeiden?
Andere Frage: Gibt es noch weitere Varianten?
Edit: Beispiele vereinheitlicht
Dabei bin ich auf die Tupel- und Dictionary-Varianten gestoßen. Und die werden natürlich erstmal komplett ausgewertet, unabhängig davon, welchen Wahrheitswert man kriegt. Wenn man sich das angewöhnt und irgendwann rechenintensive Funktionen hat, ist das sicher ein ganz schöner Stolperstein und Flaschenhals. Deswegen fällt mir keine gute Einsatzmöglichkeit ein.
Sind die sinnvoll einsetzbar oder sollte man sie grundsätzlich vermeiden?
Andere Frage: Gibt es noch weitere Varianten?
Hier meine bisherigen Notizen dazu:
Python:
# Funktionsaufrufe ausgeben
def infoMsg(msg: str) -> str:
print(f"call: infoMsg('{msg}')")
return msg
# Legende:
# + positiv
# * neutral
# - negativ
# Simple Variante
# + inline
print(infoMsg("simpL-wahr") if 8 == 3 else infoMsg("simpL-falsch"))
# > call: infoMsg('simpL-falsch')
# > simpL-falsch
# Tupelzuordnung
# + inline
# * Reihenfolge: (onFalse, onTrue) [bedingung]
# - Referenzen: werden alle aufgerufen
print((infoMsg("tupL-falsch"), infoMsg("tupL-wahr"))[8 == 3])
# > call: infoMsg('tupL-falsch')
# > call: infoMsg('tupL-wahr')
# > tupL-falsch
# Dictionary
# + inline
# + Reihenfolge beliebig
# - Referenzen: werden alle aufgerufen
print({True: infoMsg("dixN-wahr"), False: infoMsg("dixN-falsch")}[8 == 3])
# > call: infoMsg('dixN-wahr')
# > call: infoMsg('dixN-falsch')
# > dixN-falsch
# Lambda
# + inline
# * Reihenfolge: (onFalse, onTrue) [bedingung]
print((lambda: infoMsg("lambда-falsch"), lambda: infoMsg("lambда-wahr"))[8 == 3]())
# > call: infoMsg('lambда-falsch')
# > lambда-falsch
Edit: Beispiele vereinheitlicht
Zuletzt bearbeitet: