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'
)
|