Pythonの関数での可変長引数の使い方
pythonでの可変長引数は、以下のように*と**を引数に付与して使用する。
def func(*arg1, **arg2):
*arg1のように*が1つの場合は、可変長のタプル
**arg2のように*が2つの場合は、可変長の辞書
となる
実際に利用方法を見ていきましょう。
- 可変長タプル
def spam(arg1, *arg2):
print("arg1 = {}, arg2 = {}".format(arg1, arg2)) # arg1とarg2を表示
print(type(arg2)) # <class 'tuple'>が表示され、arg2がタプルであることがわかる
print(arg2[2]) # arg2のインデックス2の値を表示
print("arg1 = {}, arg2 = {}".format(arg1, arg2)) # arg1とarg2を表示
print(type(arg2)) # <class 'tuple'>が表示され、arg2がタプルであることがわかる
print(arg2[2]) # arg2のインデックス2の値を表示
spam(3,4,5,5) # 1つ目の引数はarg1,残りはarg2にタプルとして格納され、"arg1 = 3, arg2 = (4, 5, 5)"、"5"と表示される
- 可変長辞書
def spam(arg1, **arg2):
print("arg1 = {}, arg2 = {}".format(arg1, arg2)) # arg1とarg2を表示
print(type(arg2)) # <class 'dict'>が表示され、arg2が辞書型
print(arg2['key1']) # arg2のキーkey1の値を表示
print("arg1 = {}, arg2 = {}".format(arg1, arg2)) # arg1とarg2を表示
print(type(arg2)) # <class 'dict'>が表示され、arg2が辞書型
print(arg2['key1']) # arg2のキーkey1の値を表示
spam(3,key1=5, key2=6) # "arg1 = 3, arg2 = {'key1': 5, 'key2': 6}", 5と表示される
- 可変長タプル、可変長辞書を両方利用
def spam(arg1, *arg2, **arg3):
print("arg1 = {}".format(arg1))
for value in arg2: # タプルarg2の中身をループで表示
print(value)
print("arg1 = {}".format(arg1))
for value in arg2: # タプルarg2の中身をループで表示
print(value)
for key in arg3.keys(): # 辞書arg3のキー一覧をループで取得
print("key = {}, value = {}".format(key, arg3[key]))
spam(3,4,5,6,arg3=5, arg4=6)
# 3はarg1に、4,5,6はタプル(4,5,6)としてarg2に、{'arg3': 3,'arg4': 6}としてarg3に代入して関数を呼び出す