1. 程式人生 > >Python中*和**的作用(課堂小結)

Python中*和**的作用(課堂小結)

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中*和**的作用(課堂小結)