在Python函数中,除了参数还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。如果读者经常看 Python 模块库代码,会发现很多函数的参数定义,都会跟上 *args
和 **kwargs
,我们接下来详细了解这两者。
假如我们有一个如下函数:
def Func(nums):
for item in nums:
print(item)
Func([1,3,5])
1
3
5
如果是固定参数的话,想要函数正常运行,我们输入的值需要先组装出一个list或tuple。但是使用可变参数,可以简化,函数定义如下:
def Func( *nums):
for item in nums:
print(item)
Func([1,3,5])
Func(1,3,5)
[1, 3, 5]
1
3
5
此时在函数内部,参数nums接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数
**kwargs
key word arguments,顾名思义,**kwargs
是跟字典相关。形参名前加两个*表示,参数在函数内部将被存放在以形式名为标识符的 dictionary 中, 这时调用函数的方法则需要采用 arg1=value1,arg2=value2 这样的形式。
简单的总结这两者的区别:
*args
传入的主要是list/tuple;**kwargs
传入的主要是字典形式的数据.
我们还是将之前的例子,略做修改:
def Func( **nums):
for item in nums:
print(item)
Func(x=1,y=2,z=3)
print('***************')
numdict = {
'x':1,
'y':2,
'z':3
}
Func(**numdict)
x
y
z
***************
x
y
z
上面的例子中 Func(x=1,y=2,z=3) 等价于 Func(**numdict)。