可変長引数とは
可変長引数とは、関数の引数の個数を指定せずに引数を渡す方法です。Pythonの関数の引数には、**と*が記述されている関数のプログラムが可変長引数です。関数定義の中で、仮引数(関数定義側)に*を使うと、可変個(固定ではなく任意の個数という意味)の位置引数をタプルにまとめてその仮引数にセットします。
可変長引数(*args, **kwargs)のサンプルプログラム
では、実際にプログラムを見てみましょう。
def sample(*args):
print(args)
sample() # ()
sample(1,2,3,'python') # (1,2,3,'python')
*が一つの形式の場合、これより後ろの仮引数は全て、「キーワードオンリー」の引数となります。つまり、キーワード引数としてのみしか使えず、位置引数に出来ません。
def concat(*args, sep="/"):
return sep.join(args)
print(concat("/Users", "aiacademy", "Desktop" , "sample.py")) # /Users/aiacademy/Desktop/sample.py
print(concat("/Users/", "aiacademy", "Desktop" , "sample.py", sep="|")) # /Users/|aiacademy|Desktop|sample.py
アスタリスクを2つ(**)使うと、キーワード引数を1個の辞書にまとめることが出来ます。引数の名前は辞書のキー、引数の値は辞書の値になります。
def sample(**args):
print(args)
sample(name='Tom', age='25', gender='male') # {'name': 'Tom', 'age': '25', 'gender': 'male'}
復習になりますが、辞書型は作成された時の要素の順番と、出力した時の順番が異なっているのは、辞書型では要素に順番は無いために、出力した際にはどのような順番で要素が出力されるのかは分かりません。
毎回出力するたびに、出力結果として順番は異なっております。もし、とを併用する場合は、先にその次にで並べる必要があります。
ちなみに、このテキストでは、*との際にどちらも、argsとしましたが、別にargsと言う名前にする必要はありません。
おわりに
この記事では、可変長引数(*args, **kwargs)とは何か、また可変長引数の使い方をサンプルプログラムを通して学びました。Pythonを効率よく学ぶには、現役のデータサイエンティストや機械学習エンジニアに質問し放題かつ、体系的に学べる動画コンテンツでデータ分析技術を学びたい方は、オンラインで好きな時間に勉強できるAI Academy Bootcampがオススメです。