- Published on
Pythonの*argsとタプルについて
- Authors
- Name
- Kikusan
結局のところタプルってなんなんってところをまとめます。
タプルとは
基本的には内容の変更ができないリストのことだと思っていい。 注意点
- タプルに入れたオブジェクトは中身の変更が可能
- () で宣言だが、ただカンマで区切っただけでもタプルとして認識される
サンプルコードを見ると理解が早かった。
t = (1, 2, 3)
# t[0] = 0 変更できない(appendもできない)
# オブジェクトを入れて中身を変更はできる
t = (1, [1, 2])
t[1][0] = 0
print(t) # (1, [0, 2])
t = 1, 2, 3 # カンマ区切りでタプルと認識される
print(type(t)) # <class 'tuple'>
# (1) はただの数値なので注意。タプルにしたいなら(1,)
# タプルのパッキング
t = (1, 2, 3)
# タプルのアンパッキング
x, y, z = t
print(x, y, z) # 1 2 3
# 入れ替えもtmpなしでできる
x, y = y, x
print(x, y) # 2 1
*argsとは
上記を踏まえて、可変引数をタプルで受け取る方法だと思っていい。
- はなにかというと、タプルをアンパッキング or パッキング して関数の引数に 渡す or 受け取る ことができるただの書き方だった。
これもサンプルコードを見ると理解が早かった。
# タプルは残りの引数、辞書はキーワード引数
def menu(food, *args, **kwargs):
print(f'food: {food}')
print(f'args: {args}')
for a in args:
print(a)
print(f'kwargs: {kwargs}')
for k, v in kwargs.items():
print(k, '=', v)
menu('banana', 'apple', 'orange', entree='beef', drink='coffee')
# food: banana
# args: ('apple', 'orange')
# apple
# orange
# kwargs: {'entree': 'beef', 'drink': 'coffee'}
# entree = beef
# drink = coffee
# これをタプルと辞書を* ** を使って書く
t = ('apple', 'orange')
d = {'entree': 'beef', 'drink': 'coffee'}
menu('banana', *t, **d)
# 出力は上と同じ
# ちなみに* ** を使わないと *argsに認識されちゃうよね
menu('banana', t, d)
# food: banana
# args: (('apple', 'orange'), {'entree': 'beef', 'drink': 'coffee'})
# ('apple', 'orange')
# {'entree': 'beef', 'drink': 'coffee'}
# kwargs: {}
勢いあまってdictもやってしまったがやっていることは同じだった。