ウェブや書籍でも見かける「*args」という記述。
一言でいうと「引数の数が決まっていないときに使う」というものです。
この記事では「*args」について具体的な例を使って説明します。
なお、「**kwargs」についての解説記事は↓こちらです。
合わせてご覧ください。
理解できる対象者・レベル
この記事では、以下の方を想定して解説しています。
- 基本的なPythonの関数の定義が分かる
- 定義された関数を実行(呼び出す)ことができる
- タプルと言われて何のことか分かる(リストとの違い程度でOK)
通常の関数の定義と呼び出し
まずは、一般的な関数の定義とその関数を呼び出す際の記述を確認しましょう。
def call(name):
print('こんにちは、' + name + 'さん')
上記では、callという関数を定義し、引数にnameとあります。
そのnameをprint文の中で使っています。
この関数を呼び出すとき、例えば以下の様に呼び出すと、
call('papa')
実行結果は「こんにちは、papaさん」となります。
このとき、call関数には’papa’という値が渡されるのですが、その’papa’はcall関数の引数(name)に入ります。
そのnameはprint文で使われているので、「こんにちは、papaさん」と出力されているのです。
この関数の基本が分かれば、この記事は理解できるでしょう。
もし関数について分からないという場合、こちらの記事を参考にしてください。
可変長の引数の使用方法
まずは、基本的な説明をスライドで確認しましょう。
記載の通り、argsという名前は慣例であり、本当はどんな文字でも構いません。
なお、args(アーグスまたはオーグス)とは、引数を意味する「argument」のことを指します。
(クラスの定義でselfを使うのと同じ意味ですが、この説明が分からなければ忘れてください。
いくつかパターンを紹介しますが、まずは基本から。
可変長の引数の仕組みは、「タプルで受け取る」ということです。
タプルで受け取ったものは、リストと同じように「複数の値が入っている」ため、それらを順番に取り出して使うことになります。
(まだ難しいですね??)
*argsを使った例題①
最初の例題では、複数の都道府県の名前を受け取り、⇒と組み合わせて出力するという関数です。
以下の様に関数を定義しましょう。
def route(*args): # 受け取る引数がいくつでも対応できる
route_list = list(args) # 出力すると['東京', '新潟', '秋田']と表示
route_result = "⇒".join(route_list) # それぞれの値の間に⇒を付ける
print(route_result)
route('東京', '新潟', '秋田') # 関数を呼び出す際、3つの引数を渡している
実行結果は「東京⇒新潟⇒秋田」となります。
この例では、route関数を呼び出すとき、引数が増えても減ってもうまく出力してくれます。
def route(*args): # 受け取る引数がいくつでも対応できる
route_list = list(args) # 出力すると['東京', '新潟', '秋田', '青森']と表示
route_result = "⇒".join(route_list) # それぞれの値の間に⇒を付ける
print(route_result)
route('東京', '新潟', '秋田', '青森') # 関数を呼び出す際、4つの引数を渡している
実行結果は「東京⇒新潟⇒秋田⇒青森」となります。
「おー!便利だなぁ」と思ったら理解できたということですね。
*argsを使った例題②
次に、「必ず使う引数と組み合わせて使う」というやり方を紹介します。
先ほどの例題①のうち、「スタートとゴールは決まっているけど、経由地が変わることがある」という状況を考えてみましょう。
def route(start, goal, *args):
route_list = [start]
route_list += list(args)
route_list += [goal]
route_result = "⇒".join(route_list)
print(route_result)
start = "東京"
goal = "北海道"
route(start, goal, '秋田')
実行結果は「東京⇒秋田⇒北海道」となります。
この例でも、route関数を呼び出すとき、第3引数以降が増えても減ってもうまく出力してくれます。
このとき、startやgoalのように名前を付けて値を渡す引数のことを「キーワード引数」といいます。
def route(start, goal, *args):
route_list = [start]
route_list += list(args)
route_list += [goal]
route_result = "⇒".join(route_list)
print(route_result)
start = "東京"
goal = "北海道"
route(start, goal, '新潟', '秋田')
実行結果は「東京⇒新潟⇒秋田⇒北海道」となります。
まとめ
いかがだったでしょうか。
Pythonの可変長引数「*args」について解説しました。
似たようなもので「**kwargs」というものがありますが、この説明はこちらの記事で紹介します。
記事に関する間違い、ご質問などがありましたら、コメントにてお知らせください。
それでは、ステキなPythonライフを!