python中*arg和**kwarg是什么?作用是什么?

普通函数的参数:

>> def func(words):
	print(words)

>> func("a")
>> a

>> func("a","b")
>> TypeError: func() takes 1 positional argument but 2 were given

很明显,普通的函数参数定义后,函数参数的个数是固定的。而当我们想输入的参数个数多余或者少于定义的个数时,编译就会报错。那怎么解决呢?

这里就要用到可变参数*args 和 **kwargs。

如果我们不确定要往函数中传入多少个参数,或者我们想往函数中以列表和元组的形式传参数时,那就使要用*args;
如果我们不知道要往函数中传入多少个关键词参数,或者想传入字典的值作为关键词参数时,那就要使用**kwargs;

1.*args的使用方法

*args用来将参数打包成tuple(元组)给函数体调用
举个栗子:

>> def func2(*args):
>>		print(args,type(args))
>>
>> func2("a")
>> ('aa',) <class 'tuple'>
>
>> func2(1,2,3)
>> (1, 2, 3) <class 'tuple'>

为了区分普通参数和*args参数的区别,再举一个栗子:

>>def func3(words,words2,*args):
    print(words,words2,args)

>> func3(1,2,3,4,5)
>> 1 2 (3, 4, 5)
 
>> func3(1,2,3)
>> 1 2 (3,)

很明显,这里的(3,4,5)和(3,)都被打包成了tuple类型的数据。

2.**kwargs的使用方法

**kwargs 打包关键字参数成dict(字典)给函数体调用
举个栗子:

>> def func(**kwargs):
    print(kwargs,type(kwargs))

>> func(a=1,b=2)
>> {'a': 1, 'b': 2} <class 'dict'>

这里,将a=1和b=2打包成了dict类型数据。

有了 *args和 **wrags这两个可变参数,我们就可以更加方便地定义函数参数,而不用考虑参数个数或者关键词个数了。

这里有一个点需要注意,当我们混合使用这三个参数时,必须遵循arg,*args,**kwargs这样的顺序,否则程序会报错。

>> def func(arg,*args,**kwargs):
>>    print(arg,args,kwargs)

>> func(1,2,3,4,a=5)
>> 1 (2, 3, 4) {'a': 5}

错误排列:

>> def func(arg,**kwargs,*args):
>>    print(arg,args,kwargs)
  
>> SyntaxError: invalid syntax 
  • 11
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值