Unpacking
Unpacking
Python では,tuple や listといった複数の要素からなるデータ構造を分解し, 各要素をそれぞれ変数に代入する操作 (Unpacking) が提供されています.
たとえば,(1, 'YES', True) から,各要素を取り出して,変数 a, b, c に代入するならこんな感じ.
t = 1, 'YES', True # 先にデータ構造を作成
a, b, c = t # こちら
別に,t の各要素は t[0], t[1], t[2] で取り出せますが,適切な名前を付けたほうが分かりやすいので,
そういうとき便利です.
例えば,x, y 座標を二つ受け取って,その足し算結果を返す時に,こんな感じ.
def add(v1, v2):
x1, y1 = v1 # 引数のデータ構造を分解したり
x2, y2 = v2
return x1+x2, y1+y2
# あるいは (x, y) をそれぞれ +1 した (nx, ny) が欲しいなら
nx, ny = x+1, y+1
いくつか,ポイントを述べておきます.
- いらない部分は変数の代わりに
_と書くと,捨ててくれます.
t = 1, 'YES', True # 先にデータ構造を作成
_, _, c = t # 最後の値だけ欲しい
- 要素数が合わないとエラーが出ます.残り要素などを list の形で受け取りたい場合は
*rest(restは受け取る変数名)などと記載します.
t = 1, 'YES', True # 先にデータ構造を作成
a, *bc = t # a: 1, bc: ['Hello', True] となる
- tuple や list に対して利用するのが一般的で,dict や set への扱いは少し注意が必要です.dict の場合 key だけが取り出されます.set の場合は並び順が定まらないので,要注意です.