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

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

(Last modified: )

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

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

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 は空のタプルとなります。

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

サンプルコード

次のサンプルを見てください。

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")
>> Fruits
>> No.1:Orange
>> No.2:Melon
>> No.3:Banana
>> No.4:Apple

myfunc("Mobile", "Android", "iPhone")
>> Mobile
>> No.1:Android
>> No.2:iPhone

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

-- --

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

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。