Pythonのdef文で関数を作り複数の引数と可変数の引数の受け入れ

Pythonのdef文で関数を作り複数の引数と可変数の引数の受け入れについて解説しています。

関数を定義し、複数の引数を取ることができ、複数の引数を持つ関数は問題ではありません。また、可変数、もしくは可変長の引数を受け入れる関数を定義することもできます。可変数、もしくは可変長とは、長さが変わりますという意味で、変わりうることです。

■Python

Google Colaboratory(Google Colab),Python3.7.10

■関数を定義し、複数の引数と可変数の引数を受け入れる

では、早速、def文で関数を定義し、複数の引数と可変数の引数を受け入れてみます。

■コード

def test(a, b, c, *n):
     print("a: %s" %(a))
     print("b: %s" %(b))
     print("c: %s" %(c))
     print("n: %s" %(list(n)))

test(1, 2, 3, 5, 6,7,8,9)

今回はdef文を使用し、testという関数を定義します。関数の括弧内にはa,b,cという複数の引数と、”*(アスタリスク)”を使用し、nという引数を設定します。”*(アスタリスク)”を使用することで、可変数の引数を受け入れることができます。なお、今回nに渡した値は、list()関数を使用し、リスト(配列)を作成します。

引数を設定後、testという関数内で実行する処理を記述します。%演算子による文字列フォーマットで、”%(パーセント)”の後に「s」と記述し、それぞれの引数に渡した値を、str()関数で変換し、print()関数で出力します。

最後に、今回定義したtestという関数を呼び出すために、関数名と括弧を記述します。括弧内には引数として渡す数値を記述します。

■実行・検証

スクリプトを作成後、このスクリプトを実行してみます。

実行してみると、定義したtestという関数内の処理が実行し、引数として渡した数値が、print()関数で出力されました。”*(アスタリスク)”を使用し、nという引数は、最初の3つの引数の後に、test関数に引数として渡した全ての数値を受け入れ、受け入れた数値が全て格納されたリスト(配列)として出力されました。

■”*(アスタリスク)”を使用しない場合はどうなるのか

出力後、実験として、”*(アスタリスク)”を使用せずに、nという引数を設定し、関数を呼び出してみます。

—————————————————————————
TypeError Traceback (most recent call last)
<ipython-input-7-e6cd6775e635> in <module>()
5 print(“n: %s” %(list(n)))
6
—-> 7 test(1, 2, 3, 5, 6,7,8,9)

TypeError: test() takes 4 positional arguments but 8 were given

呼び出してみると、TypeErrorというエラーが発生し、「test() takes 4 positional arguments but 8 were given(test()は4つの位置引数を取りますが、8つの位置引数が与えられました。)」という内容が出力されました。出力されたことで、”*(アスタリスク)”を使用しないと、可変数の引数を受けることができないことがわかりました。

コメント

タイトルとURLをコピーしました