3.16. 可変長引数

Pythonでは可変長引数を定義することができます。プログラミングを行う上で必須の知識ではないので、まずは「そういった機能があるんだ」という程度でも構いません。

3.16.1. *args

関数のパラメータ定義において、引数名の前に「 * 」を付与することで可変長引数となります。

1
2
3
4
def test_func(*args):
   print (args)

test_func(1, 2, 3, 4, 5)

出力

(1, 2, 3, 4, 5)

実行結果の通り、「 * 」を用いた可変長引数は、関数内においてタプルとして引き渡されます。これはたとえばos.path.joinを使用したパスの結合・連結などで、結合対象のパスをいくつでも渡せるような機能を持たせることができます。 また通常の引数と併用することも可能です。

1
2
3
4
5
 def test_func(code, name, *args):
     print code, name
     print args

 test_func(100, 'python-3', 'JP', 'US')

出力

100 python-3
('JP', 'US')

3.16.2. **kwargs

引数名の前に「 ** 」を付与することでも可変長引数となります。

1
2
3
4
def test_func(**kwargs):
    print (kwargs)

test_func(code=100, name='python-3')

出力

{'code': 100, 'name': 'python-izm'}

実行結果の通り、「 ** 」を用いた可変長引数は、関数内においてディクショナリとして引き渡されます。keyが引数名、valueが値となります。 こちらも同様に通常の引数と併用することができます。また「 * 」を使用した可変長引数と併用することも可能です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
def test_func(code, name, kana, *args, **kwargs):
    print code, name, kana
    print args
    print kwargs

test_func(
    100, 'python-izm', 'パイソンイズム',
    'JP', 'US',
    email='xxxx', city='Tokyo'
)