[Python] Zuweisung von mehreren Variabeln in einer Zeile
-
Die Ausdrücke auf der rechten Seite werden alle ausgewertet, bevor sie zugewiesen werden.
-
Nymer schrieb:
Die Ausdrücke auf der rechten Seite werden alle ausgewertet, bevor sie zugewiesen werden.
Das stimmt. Habe ich nicht bedacht. Ich Noob.
-
Na das ist doch mal eine Erklärung, ich wäre fast vom Glauben abgekommen.
Nun kann ich beruhigt an der Matratze horchen.
-
q, r, t, k, m, x = q*k, (2*q+r)*x, t*x, k+1, (q*(7*k+2)+r*x)//(t*x), x+2
ist sowas eigentlich esotherisch?
PS:
was ich damit sagen will: so einen code wuerde ich bei uns wieder zurueck zum autor schicken...
-
Definitiv.
Mit einem Kommentar, dass man genau das von Nymer beschriebene Verhalten braucht (und ansonsten jede Menge zusätzliche Variablen bräuchte, die den Code auch nicht leserlicher machen würden), könnte man es eventuell durchgehen lassen.
-
Ja so wuerde ich das auch nie benutzen. Wenn man mehr als einen Rueckgabewert hat, da finde ich das sehr praktisch.
def foo(): return 2, 4, 8 a, b, c = foo()
Ich kenne sonst keine Programmiersprache wo das so schoen geht (will damit nicht sagen dass es keine gibt!).
-
Damit lässt sich schön ein "swap" implementieren:
x,y = y,x
Ich glaube, das steht sogar irgendwo im Python Handbuch auf python.org. Also so verwunderlich finde ich das jetzt nicht.
-
Oliver schrieb:
Ich kenne sonst keine Programmiersprache wo das so schoen geht (will damit nicht sagen dass es keine gibt!).
Hmm, in Haskell geht das ziemlich genauso, aber das kennst du vermutlich nicht.
Kennst du dafür C++? Da geht das fast so schön
std::tie(x, y) = std::tuple(y, x);
-
schoen schrieb:
Kennst du dafür C++? Da geht das fast so schön
std::tie(x, y) = std::tuple(y, x);
da fehlt aber noch die Definition von x und y.
C++ ist immer "fast so schön", wenn man all den Boilerplate-Code ausblendet
-
ups, hatte den Thread ein bischen zu schnell überflogen und dann geantwortet, wieso boost::tie keinen Spaß macht.
Aber das swap über tie-tupelei ist auch kein Code den man jemals so verfassen würde...