單星號(hào)形式(*args)用來(lái)傳遞非命名鍵可變參數(shù)列表。雙星號(hào)形式(**kwargs)用來(lái)傳遞鍵值可變參數(shù)列表。
下面的例子,傳遞了一個(gè)固定位置參數(shù)和兩個(gè)變長(zhǎng)參數(shù)。
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 ) |
結(jié)果如下:
1
2
3
|
formal arg: 1 another arg: two another arg: 3 |
這個(gè)例子用來(lái)展示鍵值對(duì)形式的可變參數(shù)列表,一個(gè)固定參數(shù)和兩個(gè)鍵值參數(shù)。
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 ) |
執(zhí)行結(jié)果:
1
2
3
|
formal arg: 1 another keyword arg: myarg2: two another keyword arg: myarg3: 3 |
調(diào)用函數(shù)時(shí),使用 *args and **kwargs
這種語(yǔ)法不僅僅是在函數(shù)定義的時(shí)候可以使用,調(diào)用函數(shù)的時(shí)候也可以使用
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) |
執(zhí)行結(jié)果如下:
1
2
3
|
arg1: 1 arg2: two arg3: 3 |
鍵值對(duì)方式:
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) |
結(jié)果如下:
1
2
3
|
arg1: 1 arg2: two arg3: 3 |