Pythonアンパック入門

Pythonにはアンパックという仕組みがあって理解すると便利です。
使い方をまとめてみました。

リストを複数の変数に一気に代入できます。

a = [0, 1, 2]
x, y, z = a
print(x, y, z)
結果
0 1 2

要素の数と変数の数が同じでないとダメなのですが、*を使うと同じでなくてもOKです。
余った分が*が付いた変数にリストとして代入されます。

a = [0, 1, 2, 3, 4, 5]
x, y, *z = a
print(x, y, z)
x, *y, z = a
print(x, y, z)
*x, y, z = a
print(x, y, z)
結果
0 1 [2, 3, 4, 5]
0 [1, 2, 3, 4] 5
[0, 1, 2, 3] 4 5

次のような引数が3個の関数があったとします。

def test(x, y, z):
return [x * 10, y * 10, z * 10]

いちいち変数3個にしなくてもリストに*を付けて(1個だけ)代入すると勝手に3個の引数にそれぞれ代入されます。

a = [0, 1, 2]
print(test(*a))
結果
[0, 10, 20]

辞書の場合は**を付けて代入すると、それぞれの変数に合致するキーの値が代入されます。
キーが合っていれば順番は変わってもいいですが、過不足があるとダメです。

b = {“x”:10, “y”:20, “z”:30}
print(test(**b))
結果
[100, 200, 300]

*をイテラブルアンパック演算子、**を辞書アンパック演算子と呼ぶそうです。
この二つを組み合わせた使用例です。

def ketsugo(*words, sep=”|”):
return sep.join(words)

words = [“apple”, “banana”, “carrot”]
options = {“sep”:”&”}
print(ketsugo(*words, **options))
結果
apple&banana&carrot

コメント

タイトルとURLをコピーしました