【python】関数化 可変長引数

2020年5月17日

関数コール時に引数の量を可変で渡すことができます。これを可変長引数といいます。
関数引数名の先頭のに*(アスタリスク)を付けると設定することができます。
可変長変数はタプルとして渡されます。

def testFunction1( param1,param2,*param3):
    print("param1 =",param1)
    print("param2 =",param2)
    print("param3 =",param3)

上記でparam3が可変長引数となり、それ以外は通所の変数になります。
引数の代入が3つ以上の時に関数を呼び出すことができ、3つ以上からは全て可変長引数としてタプルとして渡されます。

①可変長引数に複数の変数を渡す

下記では3から6までを可変長引数としてタプルに格納して渡すことができます。

testFunction1(1,2,3,4,5,6)   #param1 = 1
                             #param2 = 2
                             #param3 = (3, 4, 5, 6)

② 可変長引数に複数の変数を渡す(異なる型)

可変長引数はint型の変数をstr型の変数を同時に渡すことも可能です。

testFunction1(1,"2",3,"4",5,"6") #param1 = 1
                                 #param2 = 2
                                 #param3 = (3, '4', 5, '6')

③ 可変長引数にリストを渡す

リストを渡した場合はタプルの中にリストが入っている状態となります。自動的にリストが解除されたりはしません。

testFunction1(1,2,[3,4,5,6]) #param1 = 1
                             #param2 = 2
                             #param3 = ([3, 4, 5, 6],)

④可変長引数の間違った使い方(エラー例)

関数定義時に可変長引数を最初に設定して次に引数を設定した場合エラーになります。
可変長引数は引数量が設定できず、第二引数を設定すことができないからです。

def testFunction2(*param1,param2):
    print(param1)
    print(param2)

def sample4():
    #④可変長引数の間違った使い方(エラー例)
    print("④")
    try:
        testFunction2(1,2,3,4,5,6)
    except:
        import traceback
        traceback.print_exc()    #Traceback (most recent call last):
                                 #  File "04_kahen.py", line 9, in sample4
                                 #    testFunction2(1,2,3,4,5,6)
                                 #TypeError: testFunction2() missing 1 required keyword-only argument: 'param2'

ソースコードはこちらから

このページで紹介している記事のソースコードの販売を行っています。
python基本を押さえたソースコードを収録しています。
購入頂いたソースコードは商用利用OKになります。

ソースコードの販売はこちら