関数で可変個数の引数を受け取る

広告
eyecatch

関数側の定義で引数の数が決まっていなくても可変個の引数を受け取るように定義することができます。ここでは関数で可変個数の引数を受け取るように定義する方法について解説します。

可変個数の引数を定義する

関数を呼び出す側で指定する引数(実引数)の数と関数側の引数(仮引数)の数は同じです。(デフォルト値を設定している場合は省略することもできます)。

def 関数名(仮引数1, 仮引数2):
    ....
    return

関数名(実引数1, 実引数2)

関数側の仮引数の名前の前にアスタリスク(*)を付けると、その仮引数は 0 個から任意の数の値を受け取ることが出来るようにになります。

def 関数名(仮引数1, *仮引数2):
    ....
    return

関数名(実引数1)
関数名(実引数1, 実引数2)
関数名(実引数1, 実引数2, 実引数3)
関数名(実引数1, 実引数2, 実引数3, 実引数4)
関数名(実引数1, 実引数2, 実引数3, 実引数4, 実引数5)

上記の場合、実引数 1 は仮引数 1 に代入されますが、実引数 2 から 実引数 5 まではすべて仮引数 2 に代入されることになります。この時に、複数の値を代入できるように仮引数 2 はタプルのオブジェクトになり、引数として渡されてきた値はタプルの要素として追加されます。

次の例を見てください。

>>> def myfunc(num1, *tupple1):
...     print(tupple1)
...
>>> myfunc(10)
()
>>> myfunc(10, "Hello")
('Hello',)
>>> myfunc(10, "Hello", 25)
('Hello', 25)
>>> myfunc(10, "Hello", 25, "Orange")
('Hello', 25, 'Orange')
>>> myfunc(10, "Hello", 25, "Orange", True)
('Hello', 25, 'Orange', True)
>>>

関数を呼び出す時、 1 番目の引数は関数側の num1 に常に代入されますが、 2 番目以降に指定した引数はすべて関数側の tupple1 の要素として追加されています。なお 2 番目の引数を省略した場合は tupple1 は空のタプルとなります。

関数側ではタプルの要素を順に取り出すことで、渡されてきた引数の値を取り出すことができます。

サンプルプログラム

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 sample7-1.py という名前で保存します。

def myfunc(category, *ranktuple):
    count = 1
    print(category)
    for val in ranktuple:
        print("No." + str(count) + ":" + val)
        count += 1
    print("¥n", end='')

myfunc("Fruits", "Orange", "Melon", "Banana", "Apple")
myfunc("Mobile", "Android", "iPhone")

その後で、次のように実行してください。

python sample7-1.py

可変個数の引数を定義する(1)

関数を呼び出す時に指定した引数の数に応じて関数内で表示するテキストの数を変更してみました。

-- --

関数で可変個数の引数を受け取るように定義する方法について解説しました。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。