要区分好**kwargs
和*args
,要理解另外两个概念非关键字参数
和关键字参数
非关键字参数
和关键字参数
- 关键字参数
用一个叫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)
- 非关键字参数
还是用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
但它们用的方法是不同的。