可変長引数
Pythonでは可変長引数を定義することができます。プログラミングを行う上で必須の知識ではないので、まずは「そういった機能があるんだ」という程度でも構いません。
関数のパラメータ定義において、引数名の前に「 * 」を付与することで可変長引数となります。
# -*- coding: utf-8 -*-
def test_func(*args):
print args
test_func(1, 2, 3, 4, 5)
--実行結果--
(1, 2, 3, 4, 5)
実行結果の通り、「 * 」を用いた可変長引数は、関数内においてタプルとして引き渡されます。これはたとえばos.path.joinを使用したパスの結合・連結などで、結合対象のパスをいくつでも渡せるような機能を持たせることができます。
また通常の引数と併用することも可能です。
# -*- coding: utf-8 -*-
def test_func(code, name, *args):
print code, name
print args
test_func(100, 'python-izm', 'JP', 'US')
--実行結果--
100 python-izm
('JP', 'US')
なお引数名は必ずしも「*args」でなくてはならないわけではありません。ただし慣習的に「*args」とすべき、というような場合もあります(なお「args」は「arguments」の略)。
# -*- coding: utf-8 -*-
def test_func(code, name, *countries):
print code, name
print countries
test_func(100, 'python-izm', 'JP', 'US')
引数名の前に「 ** 」を付与することでも可変長引数となります。
# -*- coding: utf-8 -*-
def test_func(**kwargs):
print kwargs
test_func(code=100, name='python-izm')
--実行結果--
{'code': 100, 'name': 'python-izm'}
実行結果の通り、「 ** 」を用いた可変長引数は、関数内においてディクショナリとして引き渡されます。keyが引数名、valueが値となります。
こちらも同様に通常の引数と併用することができます。また「 * 」を使用した可変長引数と併用することも可能です。
# -*- coding: utf-8 -*-
def test_func(code, name, kana, *args, **kwargs):
print code, name, kana
print args
print kwargs
test_func(
100, 'python-izm', u'パイソンイズム',
'JP', 'US',
email='xxxx', city='Tokyo'
)
--実行結果--
100 python-izm パイソンイズム
('JP', 'US')
{'city': 'Tokyo', 'email': 'xxxx'}
引数名は必ずしも「**kwargs」でなくてはならないわけではありません。ただし慣習的に「**kwargs」とすべき、というような場合もあります(なお「kwargs」は「keyword arguments」の略)。
# -*- coding: utf-8 -*-
def test_func(code, name, kana, *countries, **info):
print code, name, kana
print countries
print info
test_func(
100, 'python-izm', u'パイソンイズム',
'JP', 'US',
email='xxxx', city='Tokyo'
)
以上で関数は終了です。次はクラス作成を学びましょう!
▶応用編:クラス作成
