1. 程式人生 > 其它 >python基礎之引數*args,**kwargs

python基礎之引數*args,**kwargs

python基礎之引數*args,**kwargs

python中的引數是如何傳遞的?


# 將未拆包的資料進行傳參
def run(a,*args):
   #第一個引數傳給了a
  print(a)
  # args是一個元組,裡面是2和3兩個引數
  print(args)
  # *args是將這個元組中的元素依次取出來
  print("對args拆包:",*args)# *args 相當於 a,b = args

run(1,2,3)

得到的結果是:

1
(2, 3)
對args拆包: 2 3

也就是說其實args就是一個tuple,傳入的引數都會被當成tuple
還有一個其他用法

def func(*args,**kwargs): 
    print(type(args),args,type(kwargs),kwargs) 

def func2(a,b,c,d): 
    print(a,b,c,d)

if 0 :
    func() 
    print("得到的結果是<class 'tuple'> () <class 'dict'> {}") 
    '''在python中,*arg與**kwargs用於函式定義時,均為可變引數,*arg表示任意多個無名引數,
    型別為tuple;**kwargs表示關鍵字引數,為dict。'''

#用法一 用於函式定義
if __name__ == "__main__":
    func(1,2,3,4,5,a=1,b=2,c=3)
    '''<class 'tuple'> (1, 2, 3, 4, 5) <class 'dict'> {'a': 1, 'b': 2, 'c': 3}'''
    '''使用時需將*arg放在**kwargs之前,否則會有“SyntaxError: non-keyword arg after keyword arg”的語法錯誤。'''
#用法二 用於函式呼叫 
    text1 = (1,2,3,4) 
    text2 = [1,2,3,4]
    text3 = {1,2,3,4}
    text4 = {'a':1,'b':2,'c':3,'d':4}

    func2(*text1),func2(*text2),func2(*text3),func2(**text4)

'''
*會以單個元素的形式解包序列(如元組、列表、集合),使其成為獨立的引數。
**會以鍵值對的形式解包字典,使其成為獨立的關鍵字引數。
'''