单星号形式(*args)用来传递非命名键可变参数列表。双星号形式(**kwargs)用来传递键值可变参数列表。
下面的例子,传递了一个固定位置参数和两个变长参数。
1
2
3
4
5
6
|
def test_var_args(farg, * args): print "formal arg:" , farg for arg in args: print "another arg:" , arg test_var_args( 1 , "two" , 3 ) |
结果如下:
1
2
3
|
formal arg: 1 another arg: two another arg: 3 |
这个例子用来展示键值对形式的可变参数列表,一个固定参数和两个键值参数。
1
2
3
4
5
6
|
def test_var_kwargs(farg, * * kwargs): print "formal arg:" , farg for key in kwargs: print "another keyword arg: %s: %s" % (key, kwargs[key]) test_var_kwargs(farg = 1 , myarg2 = "two" , myarg3 = 3 ) |
执行结果:
1
2
3
|
formal arg: 1 another keyword arg: myarg2: two another keyword arg: myarg3: 3 |
调用函数时,使用 *args and **kwargs
这种语法不仅仅是在函数定义的时候可以使用,调用函数的时候也可以使用
1
2
3
4
5
6
7
|
def test_var_args_call(arg1, arg2, arg3): print "arg1:" , arg1 print "arg2:" , arg2 print "arg3:" , arg3 args = ( "two" , 3 ) test_var_args_call( 1 , * args) |
执行结果如下:
1
2
3
|
arg1: 1 arg2: two arg3: 3 |
键值对方式:
1
2
3
4
5
6
7
|
def test_var_args_call(arg1, arg2, arg3): print "arg1:" , arg1 print "arg2:" , arg2 print "arg3:" , arg3 kwargs = { "arg3" : 3 , "arg2" : "two" } test_var_args_call( 1 , * * kwargs) |
结果如下:
1
2
3
|
arg1: 1 arg2: two arg3: 3 |