最近在閱讀
tablib-master
項目的源代碼,目的在于借鑒別人的代碼思路檀咙、提高自己的代碼結(jié)構(gòu)认轨。
剛開始接觸Python時,向函數(shù)傳遞最多的為對應(yīng)參數(shù)别惦,所謂說的一個蘿卜一個坑
def test_arg(a,b):
print(a,b)
漸漸地發(fā)現(xiàn)狈茉,在定義函數(shù)時,我們并不知道函數(shù)調(diào)用的時候會傳遞多少個參數(shù)掸掸,這個就是今天主題提出的問題氯庆,即向函數(shù)傳遞不定數(shù)量的參數(shù)
def test1_var_args(*arg2):
print("test1_var_args")
print(arg2)
def test2_var_arg(**arg):
print("test2_var_args")
print(arg)
def test3_var_args(arg1,*arg2):
print("test3_var_args")
print(arg1)
print(arg2)
def test4_var_args(arg1,**arg2):
print("test4_var_args")
print(arg1)
print(arg2)
def test5_var_args(arg1,*arg2,**arg3):
print("test5_var_args")
print(arg1)
print(arg2)
print(arg3)
def test6_var_args(arg1, arg2="moren",*arg3, **arg4):
print("test6_var_args")
print(arg1)
print(arg2)
print(arg3)
print(arg4)
if __name__=="__main__":
test_arg(1,2)
test1_var_args()
test1_var_args(1,2,3,4)
test2_var_arg()
test2_var_arg(a="1",b='2')
test3_var_args(1)
test3_var_args(1,2,3,4)
test4_var_args(1,a="2",b="3")
test5_var_args(1,2,3,4,a="5",b="6")
test6_var_args(1,a="2",b="3" ,c="4")
test6_var_args(1, arg2="3", c="4")
#結(jié)果
test1_var_args
()
test1_var_args
(1, 2, 3, 4)
test2_var_args
{}
test2_var_args
{'a': '1', 'b': '2'}
test3_var_args
1
()
test3_var_args
1
(2, 3, 4)
test4_var_args
1
{'a': '2', 'b': '3'}
test5_var_args
1
(2, 3, 4)
{'a': '5', 'b': '6'}
test6_var_args
1
moren
()
{'a': '2', 'b': '3', 'c': '4'}
test6_var_args
1
3
()
{'c': '4'}
上述例子可知:
?? ? - 前面帶有 *
表示為一個不定數(shù)量的元組參數(shù),默認(rèn)是()
?? ? - 前面帶有**
表示為一個不定數(shù)量的字典參數(shù)扰付,默認(rèn)是{}
?? ? - 多種參數(shù)混合使用時堤撵,需要注意順序,一般為先位置悯周、再關(guān)鍵字粒督、再不定數(shù)量的元組參數(shù)、再不定數(shù)量的字典參數(shù)
特別注意的是禽翼,當(dāng)前帶有不定參數(shù)的函數(shù)傳遞列表或者字典時屠橄,切記族跛,一定要解包否則報錯
lis=[1,2,3]
def parse(*args):
for i in args:
print(i)
parse(*lis)#解包