*args 和 **kwargs 的區別

一、*args不定長參數,若是咱們不肯定要往函數中傳入多少個參數,或者咱們想往函數中以列表和元組的形式傳遞參數時要用*args;函數

二、**kwargs關鍵字參數,若是咱們不知道要往函數中傳入多少個關鍵詞參數,或者想傳入字典的值做爲關鍵詞參數時,就用**kwargs;ui

注意:spa

  一、*args 和 **kwargs 能夠同時在函數的定義中,可是 *args必須在 **kwargs 前面。code

  二、函數調用裏的*args 和**kwargsblog

    (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中.
相關文章
相關標籤/搜索