【Python筆記】*args與**kwargs


一、描述

  • *args:任意個無名參數,類型為tuple或list
  • **kwargs:任意個關鍵字參數(key-word args,鍵值對),類型為dict

二、功能

  • 任意數目參數的接收
  • 集合參數的分解

1.任意數目參數的接收——打包操作

示例(函數傳參):

def func(a,*arg,**kwargs):#*args需放在**kwargs之前,否則出現語法錯誤
    print(a)
    print(arg)
    print(kwargs)

func(1,2,3,4,key1=1,key2=2)
func(1,2,3,4,{'key1:1,key2:2'})

輸出:

1
(2, 3, 4)    #將參數轉換為tuple類型
{'key1': 1, 'key2': 2}    #將參數轉換為dict類型
---------------------------------------
1
(2, 3, 4, {'key1:1,key2:2'})   
{}
#字典形式非獨立的鍵值對(字典是打包好的鍵值對)
#會以整體形式被*args識別為無名參數

示例(賦值操作):

_,*args,_=[1,2,3,4]    #_表示占位,接收一個元素賦值后丟棄
*args=[1,2,3,4]

輸出:

[2, 3]    #*args在賦值操作中將元素打包為list,在函數中將元素打包為tuple
----------------------------------------------------
starred assignment target must be in a list or tuple
#*args必須出現在列表或元組中
#對於_,*args,_=[1,2,3,4]無報錯,個人理解該形式組成了一個序列

2.集合參數的分解——解包操作

示例:

def func1(a,b,*args):
    print(a)
    print(b)
    print(args)

def func2(a,c,**kw):
    print(a)
    print(c)
    print(kw)
    
func1(*[1,2,3,4])
func2(**{'a':1,'b':2,'c':3,'d':4})

輸出:

1
2
(3, 4)    #3,4被*args接收並重新打包
----------------------------------
1
3
{'b': 2, 'd': 4}   

#**{'a':1,'b':2,'c':3,'d':4}將dict解包
#區別於字典整體,作為獨立鍵值對可被**kw接收
#a,c鍵接收對應值,b,d鍵值對被**kw接收並重新打包

三、總結

  • *args可實現任意無名參數的tuple or list打包,tuple or list 的解包
  • **kwargs可實現任意鍵值對的dict打包,dict 的解包
  • 對無名參數或鍵值對的解包操作、tuple/list/dict的打包操作均會報錯,注意使用*或**操作時對象的狀態

四、引用

本文引用徐玖python,在此感謝!


免責聲明!

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



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