python中的*args和**kw


學習python裝飾器decorator的時候遇到*args和**kw兩種函數值傳遞。

在python中定義函數,可以使用一般參數、默認參數、非關鍵字參數和關鍵字參數。

一般參數和默認參數在前面的學習中我們都遇到過了,而*args和**kw分別屬於非關鍵字參數和關鍵字參數,后兩者也都是可變參數。

非關鍵字參數的特征是一個星號*加上參數名,比如*number,定義后,number可以接收任意數量的參數,並將它們儲存在一個tuple中。

關鍵字參數的特征是兩個星號**加上參數名,比如**kw, 定義后,kw將接收到的任意數量參數存到一個dict中。關鍵字參數是在傳遞構成中不必按照順序傳遞(因為dict內的key-value是沒有順序的),但必須要提供”傳遞參數名=傳遞參數值”形式的參數。

如:

def try_it(*args, **kw): 
    print 'args:',args 
    print 'kw:',kw 

try_it(1,2,3,4, a=1,b=2,c=3)
try_it('a', 1, None, a=1, b='2', c=3)

運行結果:

args: (1, 2, 3, 4) 
kw: {'a': 1, 'c': 3, 'b': 2} 

args: ('a', 1, None) 
kw: {'a': 1, 'c': 3, 'b': '2'}
python中的一般參數、默認參數、非關鍵字參數和關鍵字參數可以一起使用,或者只用其中某些,但是請注意,參數定義的順序必須是:一般參數、默認參數、可變參數和關鍵字參數,先后順序不能顛倒。即:
def func(a, b, c=0, *args, **kw):
    pass

 例子:

我們用到函數’calculate_sum’,但’calculate_sum’需要多個位置參數作為元組傳給’args’。所以在函數’ignore_first_calculate_sum’需要拆元組’iargs’,然后將元素作為位置參數傳給’calculate_sum’.注意,用’*’拆元組。

所以,我們這樣調用’required_sum=calculate_sum(*iargs)’.

‘required_sum=calculate_sum(iargs)’不能這么調用,因為傳給’calculate_sum’之前我們需要unpack數值。不使用’*’將不會unpack數值,也就不能執行想要的動作。

def calculate_sum(*args):
     return sum(args)

def ignore_first_calculate_sum(a,*iargs):
     required_sum = calculate_sum(*iargs)
     print ("sum is ", required_sum)

ignore_first_calculate_sum(12, 1,4,5)

 

參考:csdn


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM