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

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

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