python中的arg_Python中的*arg和**kwarg

本文详细介绍了Python中函数参数的使用,特别是*args和**kwargs的作用。通过示例展示了如何处理传入的多个位置参数和关键字参数。当函数调用时传入超过预期数量的参数,*args会将额外的位置参数转化为元组,**kwargs则将关键字参数转化为字典。此外,还解释了如何限制关键字参数的数量,并提供了函数参数解包的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个简单的函数

首先我们可以定一个简单的函数, 函数内部只考虑required_arg这一个形参(位置参数)

defexmaple(required_arg):printrequired_arg

exmaple("Hello, World!")>> Hello, World!

那么,如果我们调用函数式传入了不止一个位置参数会出现什么情况?当然是会报错!

exmaple("Hello, World!", "another string")>> TypeError: exmaple() takes exactly 1 argument (2 given)

定义函数时,使用*arg和**kwarg

*arg和**kwarg 可以帮助我们处理上面这种情况,允许我们在调用函数的时候传入多个实参

def exmaple2(required_arg, *arg, **kwarg):

if arg:

print "arg: ", arg

if kwarg:

print "kwarg: ", kwarg

exmaple2("Hi", 1, 2, 3, keyword1 = "bar", keyword2 = "foo")

>> arg: (1, 2, 3)

>> kwarg: {'keyword2': 'foo', 'keyword1': 'bar'}

从上面的例子可以看到,当我传入了更多实参的时候

*arg会把多出来的位置参数转化为tuple

**kwarg会把关键字参数转化为dict

再举个例子,一个不设定参数个数的加法函数

def sum(*arg):

res = 0

for e in arg:

res += e

return res

print sum(1, 2, 3, 4)

print sum(1, 1)

>> 10

>> 2

当然,如果想控制关键字参数,可以单独使用一个*,作为特殊分隔符号。限于Python 3,下面例子中限定了只能有两个关键字参数,而且参数名为keyword1和keyword2

def person(required_arg, *, keyword1, keyword2):

print(required_arg, keyword1, keyword2)

person("Hi", keyword1="bar", keyword2="foo")

>> Hi bar foo

如果不传入参数名keyword1和keyword2会报错,因为都会看做位置参数!

person("Hi", "bar", "foo")

>> TypeError: person() takes 1 positional argument but 3 were given

调用函数时使用*arg和**kwarg

直接上例子,跟上面的情况十分类似。反向思维。

def sum(a, b, c):

return a + b + c

a = [1, 2, 3]

# the * unpack list a

print sum(*a)

>> 6

def sum(a, b, c):

return a + b + c

a = {'a': 1, 'b': 2, 'c': 3}

# the ** unpack dict a

print sum(**a)

>> 6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值