bedingte Zuweisung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
theotter
User
Beiträge: 27
Registriert: Mittwoch 30. Juni 2010, 16:08

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.
Benutzeravatar
sparrow
User
Beiträge: 4186
Registriert: Freitag 17. April 2009, 10:28

Code: Alles auswählen

a = "Eins" if b == 1 else "Zwei"
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

@sparrow:

Code: Alles auswählen

b = 42
Dann ist ``a`` "eins"? :D
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
JonasR
User
Beiträge: 251
Registriert: Mittwoch 12. Mai 2010, 13:59

Code: Alles auswählen

>>> b = True
>>> a = [2, 5][b]
>>> a
5
Wie wäre es damit? :D Geht wahlweise auch mit nem dict
Benutzeravatar
sparrow
User
Beiträge: 4186
Registriert: Freitag 17. April 2009, 10:28

@Hyperion: Dir fehlt die gesunde Bergluft ;)

@JonasR: Das ist zumindest keine bedingte Zuweisung.
Edit: Naja, wobei... ok ja. Meine Güte.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
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.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

pillmuncher hat geschrieben:Dank short-circuiting geht auch.
Was natürlich fürchterlich schiefgehen kann, wenn links die Bedingung wahr ist, aber der Wert in der Mitte zu False evaluiert wird:

Code: Alles auswählen

True and None or 5
Das Leben ist wie ein Tennisball.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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
Also das, was "sparrow" schon am Anfang erwähnt hatte.
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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

sparrow hat geschrieben:@Hyperion: Dir fehlt die gesunde Bergluft ;)
Ich bin grad erkältet... :oops:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
theotter
User
Beiträge: 27
Registriert: Mittwoch 30. Juni 2010, 16:08

Danke für die Antworten.
Schade, dass es nichts gibt, was syntaktisch dem von mir Beschriebenen entspricht, denn die von euch angesprochen Varianten sind nicht so intuitiv, wie die in Java, aber man kann damit leben :D
BlackJack

@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.
Leonidas
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 ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten