もっと関数について②
今回も関数について取り扱っていきます。
関数には引数が存在しますが、引数をいくつでも取ることができる方法が存在します。
それが可変長引数です。可変長なので、長さを自由に変化させることができるんですね。実際の引数との違いを見ていきましょう。以下のようなコードを書いたとします。
def a(x, y, z):
return x + y + z
このようにコードを書けば、引数に指定した三つの数字を足し合わせることができます。しかし、この場合には引数は三つしか指定できません。任意の数を足し合わせる関数を書くことはできないのです。足し合わせる数が増えるたびに、関数を定義していくのは面倒ですよね。そこで、可変長引数を用います。可変長引数は、引数の前に * を付けるだけで完成するんですが、慣習として *args という風に書かれます。これはなぜかというと、こうすることでプログラムを読む人が、可変長引数であると見た瞬間に分かるからです。
可変長引数は、いつも引数の末尾に書きます。例えば
def a(x, y, *args):
処理
と書き、これを呼び出すときに
a(1, 2, 3, 4, 5, 6)
と書いたならば、xに1が代入され、yに2が代入され、3、4、5、6はタプルとしてargsに代入されます。つまり、引数を呼び出すときに、宣言している引数以上の引数が指定された場合に、余剰の引数がすべてargsにタプルとして代入されるわけです。
具体例として、以下に全ての引数を足し合わせるプログラムを書いてみます。
def a(*args):
y = 0
for x in args:
y +=x
return y
print(a(1,2,3,4,5,6,7,8,9))
実行結果
45
この例では、関数の呼び出し時の引数全てがリストargsに代入され、そしてリストはイテラブル(繰り返し可能)なオブジェクトであるため、forにより中身を取り出して、それらを足し合わせています。
可変長引数について理解できたでしょうか?
今回はリスト型の可変長引数について取り扱いました。次は、辞書型の可変長引数について取り扱っていきましょう。
これで今回の記事は終わりです。お疲れさまでした。