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 の場合は並び順が定まらないので,要注意です.

Read more