作者:chen_h
微信号 & QQ:862251340
微信公众号:coderpai
当我们需要向函数中传递不确定数量的参数时,那么可以使用*args和**kwargs这两个变量,*args中没有key值,相当于一个参数列表,**kwargs中有key值,相当于一个参数字典。
但是我要告诉大家一个事实,写*args和**kwargs只是大家都遵守的习惯,你也可以写成*var和**vars等等。
*args的使用
*args允许你给函数传递不确定数量的参数。“不确定数量”表示你在定义函数的时候不知道调用者会传递几个参数进来。*args参数可以接受不定量的参数。下面举个例子:
def func(arg1, *argv):
print arg1
for item in argv:
pirnt item
func(1, 'from here...', '2', '3', '4')
# output
1
from here...
2
3
4
**kwargs的使用
**kwargs允许你传递不确定数量的参数,并且每个参数是带key值的。下面举个例子:
def func(**kwargs):
if kwargs is not None:
for key, value in kwargs.iteritems():
print key, value
func(name='john')
# output
name john
使用*args和**kwargs来调用一个函数
假设,存在以下这样一个需要调用的函数:
def test(arg1, arg2, arg3):
print "arg1: ", arg1
print "arg2: ", arg2
print "arg3: ", arg3
接下来我们使用*args和**kwargs来给这个函数传递参数,如下:
args = ("two", '1', '2')
test(*args)
#output
args1 : two
args2: 1
args3: 2
kwargs = {"arg3" : 3, "arg2" : "two", "arg1" : 5}
test(**kwargs)
#output
arg1: 5
arg2: two
arg3: 3
*args和**kwargs以及普通参数之间的使用顺序
如果你需要在一个函数中同时传递*args,**kwargs和普通参数,那么它们必须遵循以下传递规则:
func(fargs, *args, **kwargs)