Python入門から応用までの学習サイト


可変長引数

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




Python
スタートブック


入門 Python 3


Effective
Python


退屈なことは
Pythonにやらせよう

 
 
 

以上で関数は終了です。次はクラス作成を学びましょう!

▶応用編:クラス作成



確かな力が身につく
Python「超」入門




P  R