在一个python函数中:
def function(a,b,*args,**kwargs):
print("1")
当不知道后面有多少个参数的时候,就需要用到可变参数*args和**kwargs,这里的关键在于*和**,args和kwargs只是约定俗成的写法。其中,args是arguments的缩写,表示位置参数;kwargs是keyword argument的缩写,表示关键字参数。
在调用参数的时候,调用的每一个实际参数都会对应函数的形式参数,有两种对应方法:
1、基于关键字的顺序,即通过位置参数。
2、基于传入的关键字与值的对应关系,通过传入健值对来对应,不需要考虑顺序,即关键字参数。
*的作用是,将元组()中的参数当作位置参数传入。例如:
def say_hello(arg,*args):
print("Hello ,",arg)
for i in args:
print("hello ,",i)
say_hello("Amy","Tom","David")
>>
Hello , Amy
hello , Tom
hello , David
**的作用是,将健值对{}中的参数当作关键字参数传入。例如:
def get_info(**args):
for i,j in args.items():
print(i,"=",j)
get_info(name='Amy',age='23')
>>
name = Amy
age = 23
另外,*的作用是将元组解码为可遍历的列表。如:
a=("tom","amy","bob")
print(*a)
除此之外,*和**还可以用来给函数传参
def get_arg(arg1,arg2,arg3):
print("arg1=",arg1)
print("arg2=",arg2)
print("arg3=",arg3)
args=(1,2,3)
get_arg(*args)
kwargs={"arg2":1,"arg1":2,"arg3":3}
get_arg(**kwargs)
>>
arg1= 1
arg2= 2
arg3= 3
arg1= 2
arg2= 1
arg3= 3
函数形式参数的顺序为不可变参数fargs在可变参数args之前,位置参数args在关键字参数kwargs之前。如:
def function(fargs,*args,**kwargs):
在猴子补丁中常常用到它