Pythonの可変長引数の使い方

2021/01/10Python

Pythonでは可変長引数を扱うことができます。

可変長引数は関数の引数の個数を指定せず、引数を渡す方法です。

Pythonの可変長引数の使い方

Pythonの可変長引数の関数を作るには引数に「*(アスタリスク)」をつけて宣言します。

可変長引数には「*(アスタリスク)1つのタプル(tuple)型」と「**(アスタリスク)2つの辞書(dict)型」があります。

def 関数名( 引数1, 引数2, *可変長引数, **可変長引数 ) :
    pass

可変長引数・タプル(tuple)型

Pythonで可変長引数を「*(アスタリスク)」で宣言するとその引数はタプル(tuple)型になります。

def func1( *args ) :
    print( "args type={}".format( type( args )))
    for val in args : 
        print( "val={}".format( val ))

func1( "トラスト太郎", 25, 175, 60 )

上記のコードを実行すると

args type=<class 'tuple'>
val=トラスト太郎
val=25
val=175
val=60

となります。

可変長引数のtypeの結果が「」になっており呼び出し側で渡した引数3つが展開されています。

可変長引数の後ろには普通の引数は置けない

可変長引数の後ろには普通の引数は置けません。

def func1( *args, param ) :
    print( "args type={}".format( type( args )))
    for val in args : 
        print( "val={}".format( val ))

func1( "トラスト太郎", 25, 175, 60, 300 )

上記のコードの実行結果は

Traceback (most recent call last):
  File "C:\main.py", line 6, in <module>
    func1( "トラスト太郎", 25, 175, 60, 300 )
TypeError: func1() missing 1 required keyword-only argument: 'param'

となりエラーになります。

ただし、キーワード引数を置くことはできます

def func1( *args, param ) :
    print( "args type={}".format( type( args )))
    for val in args : 
        print( "val={}".format( val ))

    print( "pram={}".format( param ))

func1( "トラスト太郎", 25, 175, 60, param=300 )

上記のコードの実行結果は

args type=<class 'tuple'>
val=トラスト太郎
val=25
val=175
val=60
pram=300

と正常に実行できます。

可変長引数・辞書型

Pythonで可変長引数を「**(アスタリスク2つ)」で宣言するとその引数は辞書(dict)型になります。

def func1( *args, **kwargs ) :
    print( "args type={}".format( type( args )))
    for val in args : 
        print( "val={}".format( val ))

    print( "kwargs type={}".format( type( kwargs )))
    print( "param={}".format( kwargs[ "param" ] ))

    for key, val in kwargs.items() : 
        print( "{}={}".format( key, val ))

func1( "トラスト太郎", 25, 175, 60, param=300, param2=400 )

上記のコードを実行すると

args type=<class 'tuple'>
val=トラスト太郎
val=25
val=175
val=60
kwargs type=<class 'dict'>
param=300
param=300
param2=400

と「kwargs」が辞書(dict)型であつかわれ引数が展開されていることがわかります。

まとめ

Pythonの可変長引数には2つの方法があり「*(アスタリスク)」でタプル(tuple)型、「**(アスタリスク2つ)」で辞書(dict)型の可変長引数を受け取ることができます。


株式会社システムトラスト

人材募集中です。

システムトラストでは、システムエンジニア、プログラマーなどを随時募集中です。気軽にご相談ください。

お問合せ