Gibt es in Python die Möglichkeit ohne if/else, einer Variable, anhand eines boolesches Wertes, einen Wert zuzuweisen?
Ich dachte an den Java-Operator : condition ? value1 : value2 und glaube, das auch iwo mal gelesen zu haben, aber leider finde ich es nicht mehr.
bedingte Zuweisung
Code: Alles auswählen
a = "Eins" if b == 1 else "Zwei"
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
@sparrow:
Dann ist ``a`` "eins"? 
Code: Alles auswählen
b = 42

encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Code: Alles auswählen
>>> b = True
>>> a = [2, 5][b]
>>> a
5

- pillmuncher
- User
- Beiträge: 1529
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
Dank short-circuiting geht auch:
Code: Alles auswählen
>>> True and 2 or 5
2
>>> False and 2 or 5
5
In specifications, Murphy's Law supersedes Ohm's.
Was natürlich fürchterlich schiefgehen kann, wenn links die Bedingung wahr ist, aber der Wert in der Mitte zu False evaluiert wird:pillmuncher hat geschrieben:Dank short-circuiting geht auch.
Code: Alles auswählen
True and None or 5
Das Leben ist wie ein Tennisball.
theotter hat geschrieben:Gibt es in Python die Möglichkeit ohne if/else, einer Variable, anhand eines boolesches Wertes, einen Wert zuzuweisen?
Ich dachte an den Java-Operator : condition ? value1 : value2 und glaube, das auch iwo mal gelesen zu haben, aber leider finde ich es nicht mehr.
Code: Alles auswählen
result = value1 if condition else value2
Ich wollte das nur nochmal ansprechen, weil soviele andere "Vorschläge" kamen.
Es gibt zwar - wie gezeigt wurde - auch andere Möglichkeiten, die bei passender Anwendung den gleichen Effekt haben, aber die sind alle kein direktes Pendant für den von dir angesprochenen Ausdruck. Nichtsdestotrotz können die manchmal sinnvoller (vor allem: kompakter) sein, als ein explizit ausgeschriebener bedingter Ausdruck. Ist situationsabhängig.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ich bin grad erkältet...sparrow hat geschrieben:@Hyperion: Dir fehlt die gesunde Bergluft![]()

encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
@theotter: Der Ternäroperator in Java ist nicht intuitiv, sondern einfach das was Du kennst, und darum sieht anderes halt ”komisch” aus. Letztendlich dürfte Python's ``a if c else b`` für jemanden der nicht ”vorbelastet” ist, verständlicher sein als ``c ? a : b;``. Wenn das *intuitiv* wäre müsste da jemand der das nicht kennt drauf kommen können, oder zumindest wenn er es das erste mal sieht, erkennen was es tut.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Und gerade wenn man statt ``c ? a : b`` dann ``c?a:b`` schreibt, siehts aus als hätte Java einen Fragezeichen-Operator und einen Doppelpunkt-Operator. Danach zu Googlen um rauszufinden was das ist, ist etwas nervig.
Und gerade bei der Syntax kann ich mir nie merken was jetzt der "wahr"-Zweig und was der "falsch"-Zweig ist
Und gerade bei der Syntax kann ich mir nie merken was jetzt der "wahr"-Zweig und was der "falsch"-Zweig ist

My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice