|
*args和 **kwargs是在python的代碼中經(jīng)常用到的兩個參數(shù),初學者對這兩個參數(shù)的理解可能僅僅限于*args是用于接收多余的未命名參數(shù),**kwargs用于接收形參中的命名參數(shù),其中args是一個元組類型,而kwargs是一個字典類型的數(shù)據(jù)。 其實這兩個參數(shù)還涉及到了python中的一個重要的知識點,拆包與解包。這篇文章將會通過對這兩個參數(shù)的拆開揉碎講解,讓小伙伴能對拆包解包有一些更深刻的認識。(我一直認為這個世界上只存在懂與不懂兩種狀態(tài),從來沒有什么似懂非懂)。 1.*args 先看下面這段代碼,挺住別暈,哈哈。 下面是上面程序的輸出結(jié)果: 理解這段代碼需要把握住下面幾點: 1.形參中的*args其實真正接收數(shù)據(jù)的args,它是一個元組,把傳進來的數(shù)據(jù)放在了args這個元組中。 2. 函數(shù)體里的args依然是那個元組,但是*args的含義就是把元組中的數(shù)據(jù)進行拆包,也就是把元組中的數(shù)據(jù)拆成單個數(shù)據(jù)。 3. 對于args這個元組,如果不對其進行解包,就將其作為實參傳給其它以*args作為形參的函數(shù)時,args這個元組會看看作一個整體,作為一個類型為元組的數(shù)據(jù)傳入。 把握上面的這三點,就不會被剛才的程序繞暈了。 2. **kwargs 如果對上面的*args理解了,那么這個**kwargs也就不難理解了,把這兩個**類比成之前的一個*,接下來程序的所有執(zhí)行結(jié)果都可以得到合理的解釋。 執(zhí)行結(jié)果如下圖: 總結(jié): 1. *args作為形參時是用來接收多余的未命名參數(shù),而**kwargs是用來接收key=value這種類型的命名參數(shù),args是元組,kwargs是字典。 2. *和**在函數(shù)體中除了拆包之外,并沒有什么卵用。 3. 裝包的含義就是把未命名參數(shù)和命名參數(shù)分別放在元組或者字典中。 (掃描下圖二維碼,那些百度云失效的編程資源這里都有,蟹蟹關注)
|
|
|