Python ma ciekawe rozwiązanie dotyczące przepisywania wartości. Jest to szczególnie prawdziwe w przypadku, gdy za jednym zamachem chcesz przypisać kilka wartości. Instrukcja
my_tuple = (1,2,3,4)
to tzw. tuple packing – wartości 1,2,3,4 są konwertowane do tuple i zapisywane w zmiennej.
Instrukcja
(a,b,c,d) = my_tuple print(a,b,c,d)
to tzw. tuple unpacking. Jest tworzony roboczy tuple (a,b,c,d) i do niego do każdej kolejnej wartości z tego tuple są przypisywane kolejne wartości z my_tuple, więc w efekcie a ma wartość 1, b ma wartość 2, c ma wartość 3, a d ma wartość 4
Dla ułatwienia (bo Pythonowcy lubią upraszczać sprawy) podczas wykonywania można pisać nawiasy, ale nie trzeba. Tutaj do a1, a2, a3, a4 najpierw przypisują wartości w sposób tradycyjny, a potem już wykonuję równoważne polecenia:
a1=10 a2=20 a3=30 a4=40 (b1,b2,b3,b4) = (a1,a2,a3,a4) (b1,b2,b3,b4) = a1,a2,a3,a4 b1,b2,b3,b4 = (a1,a2,a3,a4) b1,b2,b3,b4 = a1,a2,a3,a4
jeszcze fajniej wygląda to przy pracy z napisami:
i,j,k,l = 'Nice' print(i,j,k,l)
Napis 'Nice’ jest traktowany jako czteroelementowa lista, a podczas przypisania do zmiennych i, j, k, l do każdej z nich trafia tylko jedna literka z napisu.
Jeśli jednak ilość zmiennych po lewej i prawej stronie się nie zgadza, to dostaniesz błąd:
x,y,z = 1,2,3,4 ValueError: too many values to unpack (expected 3)
Żeby go poprawić trzeba tylko zadbać o taką samą ilość elementów po lewej stronie jak i po prawej stronie.
Na początku wygląda to dziwnie i może się trochę w głowie kręcić od mnóstwa możliwości, ale da się przywyknąć 🙂