要区分好**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
但它们用的方法是不同的。
版权声明:本文为Will_Ye原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。