一、*args:不定長參數,若是咱們不肯定要往函數中傳入多少個參數,或者咱們想往函數中以列表和元組的形式傳遞參數時要用*args;函數
二、**kwargs:關鍵字參數,若是咱們不知道要往函數中傳入多少個關鍵詞參數,或者想傳入字典的值做爲關鍵詞參數時,就用**kwargs;ui
注意:spa
一、*args 和 **kwargs 能夠同時在函數的定義中,可是 *args必須在 **kwargs 前面。code
二、函數調用裏的*args 和**kwargs:blog
(1)*args:元組或列表「出現」
**kwargs:字典「出沒」input
(2)分割參數class
3、函數定義時傳的*args /**kwargs:密碼
(1)接收參數im
1 def Jiafa(*args): 2 sum = 0 3 for i in args: 4 sum = sum + i 5 print(sum) 6 7 Jiafa(1, 3, 5) 8 Jiafa(2, 4, 6, 8)
1 def dict(**kwargs): 2 return kwargs 3 4 userdict = dict(user1="1234", user2="5678") 5 6 x = input("請輸入用戶名:") 7 if x in userdict.keys(): 8 y = input("請輸入密碼:") 9 if userdict[x] == y: 10 print("徹底正確") 11 else: 12 print("密碼錯誤!") 13 else: 14 print("用戶不存在!")
1 def suibian(*args,**kwargs): 2 print(args) 3 print(kwargs) 4 suibian(1,2,3,[1,2,3],{'name':'apollo','age':28}) # 這裏體現的是聚合的效果,
打印結果:dict
(1, 2, 3, [1, 2, 3], {'name': 'apollo', 'age': 28})
{}
注意:{'name':'apollo','age':28})並無進入到kwargs中,緣由他不是一個鍵值對
將上面代碼改變爲:
1 def suibian(*args,**kwargs): 2 print(args) 3 print(kwargs) 4 suibian(1,2,3,[1,2,3],name='apollo',age=28) # 原來字典形式,如今直接用鍵值對傳入,效果大不同
打印結果:
(1, 2, 3, [1, 2, 3])
{'name': 'apollo', 'age': 28}
1 def suibian(*args,**kwargs): 2 print(args) 3 print(kwargs) 4 suibian(1,2,3,hobby='swimming',*[1,2,3],**{'name':'apollo','age':28}) 5 6 # 這裏體現的是打散功能,咱們看到, 7 8 #在列表前加*,結果會把列表裏面的內容迭代添加到args裏面, 9 10 #在字典前面加**,會把字典的鍵值對迭代添加到kwargs中,而不是把整個字典加到了args中.