Python函數可變參數*args及**kwargs詳解


初學Python的同學們看到代碼中類似func(*args, **kwargs)這樣的函數參數定義時,經常感到一頭霧水。

下面通過一個簡單的例子來詳細解釋下Python函數可變參數*args及**kwargs,先給出標准答案:

1. *args是arguments單詞縮寫,表示任意多個無名參數,是一個tuple,如 (1,2,3,'a','b','c')

2. **kwargs是keyword arguments單詞縮寫,表示關鍵字參數,是一個dict,如{'a':1,'b':2,'c':3}

示例代碼:

# coding:utf-8

def foo(*args,**kwargs):
    print 'args=',args
    print 'kwargs=',kwargs
    print '*'*20
 
if __name__=='__main__':
    #只傳參數*args=(1,2,3)
    foo(1,2,3)

    #只傳參數**kwargs=dict(a=1,b=2,c=3)
    foo(a=1,b=2,c=3)
    
    #傳入參數*args=(1,2,3)
    #傳入參數**kwargs=dict(a=1,b=2,c=3)
    foo(1,2,3,a=1,b=2,c=3)
    
    #傳入參數*args=(1,'b','c')
    #傳入參數**kwargs=dict(a=1,b='b',c='c')
    foo(1,'b','c',a=1,b='b',c='c')

運行結果:

args= (1, 2, 3)
kwargs= {}
********************
args= ()
kwargs= {'a': 1, 'c': 3, 'b': 2}
********************
args= (1, 2, 3)
kwargs= {'a': 1, 'c': 3, 'b': 2}
********************
args= (1, 'b', 'c')
kwargs= {'a': 1, 'c': 'c', 'b': 'b'}
********************

需要注意的是,當同時使用*args和**kwargs時,*args參數必須在**kwargs前。要是像foo(1,a=1,b=2,c=3,2,3)這樣調用的話,則會提示語法錯誤"SyntaxError: non-keyword arg after keyword arg"。


免責聲明!

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



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