Python中*和**的作用(課堂小結)
阿新 • • 發佈:2019-02-23
python col 表示 pan pre 小結 使用 code 打包
以前自學沒註意過參數的傳導中*和**的用法,這次趁著上課了解了一下,順便寫個隨筆記一下。
1.打包用法
在參數傳導中*args是不定長參數,傳入的參數是不限制個數的,比如
def bdc(*args): print(type(args)) print(args) bdc(1,2,3,4,5,6,7,[1,2,3,4,5,6])
打印出來的結果是
<class ‘tuple‘> (1, 2, 3, 4, 5, 6, 7, [1, 2, 3, 4, 5, 6])
也就是說args中保存的是傳入的所有參數,保存方式為元組
再看看**的用法,也就是**kwargs這個關鍵字參數,比如
def bdc(**kwargs): print(type(kwargs)) print(kwargs) bdc(a=1,b=[1,2,3,4,5],c={1,23,4})
打印出來的結果是
<class ‘dict‘> {‘a‘: 1, ‘b‘: [1, 2, 3, 4, 5], ‘c‘: {1, 4, 23}}
也就是說kwargs雖然同樣是打包用法,但是保存的格式卻不相同,kwargs保存格式為字典
2.解包用法
先來看*的解包用法
def bdc(a,b,c,d): print(a,b,c,d,) i = (1,2,3,4) bdc(*i)
結果如下
1 2 3 4
再來看看**的解包
def bdc(a,b,c,d): print(a,b,c,d,) i = {‘a‘:1,‘b‘:2,‘c‘:3,‘d‘:4} bdc(**i)
結果如下
1 2 3 4
需要註意的是在定義的時候*和**表示的是打包,但是在調用的時候*和**表示的卻是解包,這點不能搞混淆。之前練習不小心混淆了導致一直報錯,還有一點是*和**的類型問題,*使用和元祖類型掛鉤而**則是和字典,以後要多註意
Python中*和**的作用(課堂小結)