デフォルトのパラメータで変数パラメータを使用する
Python は、デフォルトのパラメータを使用することをサポートしています。例:
def test_defargs(one, two = 2): print 'Required argument: ', one print 'Optional argument: ', two test_defargs(1) # result: # Required argument: 1 # Optional argument: 2 test_defargs(1, 3) # result: # Required argument: 1 # Optional argument: 3
関数を定義するときに *args と **kwargs を使用する
もちろん、この記事では主に次のことについて話します。変数パラメーター (変数引数) を実現する方法: *args および **kwargs 構文を使用します。このうち、*args は可変位置引数リスト、**kwargs は可変キーワード引数リストです。また、位置引数はキーワード引数の前に置く必要があるため、*args は **kwargs の前に置く必要があります。
まずはこの2つの基本的な使い方を紹介します。
次の例は *args を使用し、必須パラメーターが含まれています:
def test_args(first, *args): print 'Required argument: ', first for v in args: print 'Optional argument: ', v test_args(1, 2, 3, 4) # result: # Required argument: 1 # Optional argument: 2 # Optional argument: 3 # Optional argument: 4
次の例は *kwargs を使用し、必須パラメーターと *args リストが含まれています:
def test_kwargs(first, *args, **kwargs): print 'Required argument: ', first for v in args: print 'Optional argument (*args): ', v for k, v in kwargs.items(): print 'Optional argument %s (*kwargs): %s' % (k, v) test_kwargs(1, 2, 3, 4, k1=5, k2=6) # results: # Required argument: 1 # Optional argument (*args): 2 # Optional argument (*args): 3 # Optional argument (*args): 4 # Optional argument k2 (*kwargs): 6 # Optional argument k1 (*kwargs): 5
関数を呼び出すときは、*args と * *kwargs を使用します
*args および **kwargs 構文は、関数定義だけでなく、関数を呼び出すときにも使用できます。違いは、関数が定義されている場所で *args と **kwargs を使用することがパラメーターをパックするプロセスである場合、関数が呼び出されるときはパラメーターをアンパックするプロセスであることです。理解を深めるために例を使用してみましょう:
def test_args(first, second, third, fourth, fifth): print 'First argument: ', first print 'Second argument: ', second print 'Third argument: ', third print 'Fourth argument: ', fourth print 'Fifth argument: ', fifth # Use *args args = [1, 2, 3, 4, 5] test_args(*args) # results: # First argument: 1 # Second argument: 2 # Third argument: 3 # Fourth argument: 4 # Fifth argument: 5 # Use **kwargs kwargs = { 'first': 1, 'second': 2, 'third': 3, 'fourth': 4, 'fifth': 5 } test_args(**kwargs) # results: # First argument: 1 # Second argument: 2 # Third argument: 3 # Fourth argument: 4 # Fifth argument: 5
*args と **kwargs を使用すると、関数を定義するのに非常に便利であり、将来のコード保守のためのスケーラビリティも向上します。
例
def foo(*args, **kwargs): print('args = ', args) print('kwargs = ', kwargs) print('---------------------------------------') if __name__ == '__main__': foo(1,2,3,4) foo(a=1,b=2,c=3) foo(1,2,3,4, a=1,b=2,c=3) foo('a', 1, None, a=1, b='2', c=3)
注意
注: この種の関数を定義または呼び出すときは、次の規則に従ってください:
変数パラメータは不変パラメータの後に来る必要があります
*args は可変位置引数リスト、**kwargs は変数リストですキーワード引数の。そして、位置引数はキーワード引数の前になければならないため、*args は **kwargs の前になければなりません