Python - 可変長引数
初めに
Pythonの引数の個数を任意個にできる可変長引数の定義の仕方をまとめます。
Index
可変長引数
可変長引数とは
関数の引数の個数が任意の個数となっている引数のことです。
可変長引数の種類
可変長引数には、次の2つがあります。
種類 | 説明 |
---|---|
位置引数 | 任意の個数の引数をタプルとして扱う*args を使って受け取る |
キーワード引数 | 任意の個数の引数を辞書の形式で扱う**kwargs を使って受け取る |
位置引数の使い方
位置引数の可変長引数は、引数に*args
を使います。呼び出すときは、,
で区切って引数を指定します。
def func(*args): print(*args) func(1, 2, 3) # 出力: 1 2 3 func(1, 2, 3, 4) # 出力: 1 2 3 4
キーワード引数の使い方
キーワード引数の可変長引数は、引数に**kwargs
を使います。呼び出すときは、キーワード = 値
の形で記述します。
def func(**kwargs): print(kwargs) func(name="佐藤", id=1, point=80) # 出力 : {'name': '佐藤', 'id': 1, 'point': 80} func(name="山田", id=2, point=90) # 出力 : {'name': '山田', 'id': 2, 'point': 90}
普通の引数と位置引数を組み合わせる
普通の引数と位置引数を組み合わせた関数を定義することができます。
普通の引数は前に記述することも後に記述することもできます。
(普通の引数を前に記述する場合)
# 普通の引数を前に記述する場合 def func(x, *args): result = ", ".join(args) print(str(x) + " : " + result) # 普通の引数にキーワードは書かない func(1, "あ", "い", "う") # 出力 : 1 : あ, い, う
(普通の引数を後に記述する場合)
# 普通の引数を後に記述する場合 def func(*args, x): result = ", ".join(args) print(str(x) + " : " + result) # 普通の引数にキーワードを書く func("か", "き", "く", x=1) # 出力 : 1 : か, き, く
普通の引数とキーワード引数を組み合わせる
普通の引数とキーワード引数を組み合わせた関数を定義することができます。
位置引数の場合との違いは、必ず普通の引数を前にする必要がある点です。
# 普通の引数はキーワードに引数の前に記述する def func(x, **kwargs): print(f'{x}: {kwargs}') # 普通の引数にはキーワードを書かない func(1, name="佐藤", point=100) # 出力 : 1: {'name': '佐藤', 'point': 100}
普通の引数、位置引数、キーワード引数をすべて組み合わせる
普通の引数、位置引数、キーワード引数をすべて組み合わせた関数を定義することができます。
注意点として、位置引数とキーワード引数を同時に使用する場合は、位置引数を先に記述する必要があります。
(例1)
def func(x, *args ,**kwargs): print(f'{x}: {args} "," {kwargs}') # 普通の引数にはキーワードを書かない func(1, 2, 3, 4, name="佐藤", point=100) # 出力 : 1: (2, 3, 4) "," {'name': '佐藤', 'point': 100}
(例2)
def func(*args, x ,**kwargs): print(f'{x}: {args} "," {kwargs}') # 普通の引数にはキーワードを書かない func(1, 2, 3, x=4, name="佐藤", point=100) # 出力 : 4: (1, 2, 3) "," {'name': '佐藤', 'point': 100}
注意点
同じ種類の可変長引数は関数定義の中で1個だけしか使用できません。つまり、位置引数は1関数1個、キーワード引数も1関数1個になります。