Pythonの関数には引数の数をあらかじめ決めずに、可変長の引数を受け取ることができる機能があります。これを「可変長引数」と呼びます。
ここでは、Pythonの関数における可変長引数について解説しています。
この記事の対象
可変長引数とは
可変長引数とは引数の数をあらかじめ決めずに、引数を受け取る事ができる機能になります。引数の数が不定の場合に柔軟に対応できるのが最大のメリットになります。
便利である反面、以下のような注意点もあります。
- 型情報の損失
可変長引数を使用すると、引数の個数や型が明示的に指定されなくなるため、静的な型チェックが効かなくなります。そのため、実行時にエラーが発生する可能性があります。 - メモリ使用量の増加
可変長引数を使用すると、引数の数が多い場合には多くのメモリを消費することになります。特に、大量のデータを扱う場合には、メモリ使用量が問題になることがあります。 - 引数の取り扱いが複雑になる
可変長引数を使用すると、関数内で引数を処理するために多くの制御フローが必要になることがあります。これにより、関数の可読性が低下する可能性があります。
可変長引数の基本的な型
#可変長引数の型
def 関数名(*関数名):
#処理内容
関数名(値1,値2,値3...)
変数名の前に「*(アスタリスク)」を付けることで可変長引数となります。
引数の前に任意の数の通常の引数を持つ
少しややこしいですが、以下のような事も可能です。
def func(x, y, *関数名):
print(x, y, 関数名)
func(1, 2, 3, 4, 5)
この場合、最初の2つの引数(x, y)は通常の引数で、残りの引数が可変長引数としてまとめられます。
【結果】
1 2 (3, 4, 5)
可変長のキーワード引数を受け取る
キーワード引数を受け取る機能もあります。
def func(**kwargs):
print(kwargs)
func(a=1, b=2, c=3)
func(name="Hoge", age=30)
変数名の前に「**(ダブルアスタリスク)」を付けることでキーワード引数を渡す事ができます。
【結果】
{"a": 1, "b": 2, "c": 3}
{'name': 'Hoge', 'age': 30}
可変長引数を用いた使用例
#可変長引数を用いた使用例
def test(*test):
sum = 0
for i in test:
sum += i
return sum
print(test(55,67,80,90))
print(test(43,53,62,77,99))
上記のプログラムは任意の引数の値を合計するものです。引数の長さが変わったものでも「*」を用いることで関数として動くことが確認できます。
【結果】
#292
#334