Python *args **kwargs 作用/怎么用
本文内容简介
本文主要讲述了python中 *args **kwargs的作用,以及如何使用他们来优化我们的代码
背景
当我们在写代码时遇到这种情况,
三个数相加的函数
def adder(x,y,z):
print("sum:",x+y+z)
adder(10,12,13)
上面代码我们可以得到输出
sum: 35
如果我们这样用:
adder(5,10,15,20,25)
会发现报错如下:
TypeError: adder() takes 3 positional arguments but 5 were given
这是因为我们定义的函数adder() 只接受三个输入参数,但是我们调用时给了五个参数。
那如果我们需要五个数相加,是不是还得重新定义一个函数,比如:
def adder(x1,x2,x3,x4,x5):
print("sum:",x1+x2+x3+x4+x5)
adder(5,10,15,20,25)
我们会得到输出:
sum: 75
这样看起来不错,可以得到我们想要的结果,不过过程不太理想,其实,python支持不定长输入参数,*args 和 ** kwargs 就是在这个时候站出来了。
*arg的使用
在前面说到的例子中,我们不确定需要输入多少个相加的参数,此时:
def adder(*num):
sum = 0
for n in num:
sum = sum + n
print("Sum:",sum)
adder(3,5)
adder(4,5,6,7)
adder(1,2,3,5,6)
我们发现当使用*arg这种方式定义函数时(其中arg字符可以根据自己情况自定义),调用时,可以输入不定长度个输入参数,并且不需要指定每个变量的名称(Non Keyword Arguments),只需要在调用时直接输入各输入数值即可。
- 注意:*arg的类型,arg为一个tuple对象,里面存放的是不定长的多个输入
**kwargs的使用
知道了*args的使用,我们再来看**kwargs的使用,当我们需要不定长的输入参数并且,我们的每个参数变量都是有名称(Keyword Arguments),如下例子:
def intro(**data):
print("\nData type of argument:",type(data))
for key, value in data.items():
print("{} is {}".format(key,value))
intro(Firstname="Sita", Lastname="Sharma", Age=22, Phone=1234567890)
intro(Firstname="John", Lastname="Wood", Email="johnwood@nomail.com", Country="Wakanda", Age=25, Phone=9876543210)
输出如下:
Data type of argument: <class 'dict'>
Firstname is Sita
Lastname is Sharma
Age is 22
Phone is 1234567890
Data type of argument: <class 'dict'>
Firstname is John
Lastname is Wood
Email is johnwood@nomail.com
Country is Wakanda
Age is 25
Phone is 9876543210
- 注意: **kwargs的类型,kwargs为一个字典。
总结
在我们不清楚实际过程中有多少个参数时,可以考虑使用*args和**kwargs中的一个来解决我们的业务问题,或者有一部分是已知,一部分是未知时,也同样可以搭配来使用。
本文详细介绍了Python中*args与**kwargs的功能与用法,通过实例展示如何利用它们处理不定数量的参数,适用于函数设计及代码优化。
1028

被折叠的 条评论
为什么被折叠?



