Seite 1 von 1
Schreibweise a = b==2 and 5 or 10
Verfasst: Sonntag 5. November 2017, 23:57
von Serpens66
Hallo
Anstatt:
kann man ja in einer Zeile zb schreiben:
Nun wundere ich mich aber, warum bei der 5 ebenfalls auf True/False geprüft wird. Ich wollte nämlich machen:
Damit also verhindern, dass es kleiner 0 wird. Doch da 0 unwahr ist, wird immer der b wert genommen.
Muss ich hier also die if/else Variante nehmen, oder mach ich bei dieser Kurzschreibweise was falsch?
Re: Schreibweise a = b==2 and 5 or 10
Verfasst: Montag 6. November 2017, 00:07
von narpfel
Moin,
du möchtest
schreiben. Im letzten Fall sogar eher
Warum der Hack mit `and` und `or` nicht geht:
Dabei ist `x and y` der Wert von `y`, wenn `x` truthy ist und sonst `x`. `w or z` ist der Wert von `w`, wenn `w` truthy ist und sonst `z`. Wenn jetzt sowohl `x` als auch `y` falsy ist, ist auch `x and y` falsy und `(x and y) or z` ist somit `z`.
Re: Schreibweise a = b==2 and 5 or 10
Verfasst: Montag 6. November 2017, 07:35
von noisefloor
Hallo,
gem der PEP20 "Zen of Python" gilt: "readability counts". Von daher würde ich so oder so immer die 1. Version schreiben. Der Rest mag zwar Zeilen sparen, gut lesbar bzw. gut verständlich ist es IMHO aber nicht
Gruß, noisefloor
Re: Schreibweise a = b==2 and 5 or 10
Verfasst: Montag 6. November 2017, 07:46
von Sirius3
@Serpens66: zur Ergänzung, die and...or...-Schreibweise war modern, als es noch kein ...if...else gab. Erstere Form sollte man wegen schlechter Lesbarkeit und den unerwarteten Nebeneffekten mit Nullen nicht mehr benutzen, zweitere nur, wenn man wirklich ein Pattern hat, der sowohl im if- als auch im else-Zweig einer Variable einen kurzen Ausdruck zuweist, der nicht der Identität entspricht.