Python *args **kwargs 作用/怎么用

本文详细介绍了Python中*args与**kwargs的功能与用法,通过实例展示如何利用它们处理不定数量的参数,适用于函数设计及代码优化。

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中的一个来解决我们的业务问题,或者有一部分是已知,一部分是未知时,也同样可以搭配来使用。

ref: Python *args and **kwargs

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

blacklong28

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值