Python中的**kwargs和*args【言簡意賅系列】

要區分好**kwargs*args,要理解另外兩個概念非關鍵字參數關鍵字參數

  • 非關鍵字參數關鍵字參數
  1. 關鍵字參數
    用一個叫student的函數說明,更好理解:
    student( name, age=0, gender='M')
    有三個參數:name,age,gender
    用關鍵字給student函數傳遞參數時,不需要要跟著順序來也沒問題,如:
    student( age=18, name='Sarah', gender='G')或者student(name='Sarah', gender='G', age=18)
  2. 非關鍵字參數
    還是用student的函數來說明:
    student( name, age=0, gender='M')
    這時就只能按三個參數的順序來傳遞參數了,打亂順序就報錯,如:
    student( 18, 'G', 'Sarah')就會報錯,改正爲: student( 'Sarah', 18, 'G')就可以了。

然後**kwargs*args就好理解了:

  • *args只能傳遞非關鍵字參數
  • **kwargs只能傳遞關鍵字參數,不帶關鍵字是傳遞不了的,要注意

繼續用剛剛的例子說明:

def student(name, age=0, gender='M'):
    print('name:', name)
    print('age:', age)
    print('gender:', gender)

一般情況我們都是直接賦值給函數,如:

student('Sarah', 18, 'G')

但實際上,我們做的項目,參數太多了,要是還這麼操作,debug一次就少一個程序猿,哈哈哈。所以會使用更方便的方式,就是用**kwargs*args,一般用得比較多的是*args,個人見解。但現在發現**kwargs更好方便理解和debug,對比兩種方法:

# 使用*args
args_list = ('Sarah', 18, 'G')
student(*args_list)
# 使用**kwargs
kwargs_dict = {'name': 'Sarah', 'age': 18, 'gender': 'G'}
student(**kwargs_dict)

三個的輸出都是:

name: Sarah
age: 18
gender: G

但它們用的方法是不同的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章