*args和**kwargs是什么?怎么使用?

在一个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):

在猴子补丁中常常用到它

你可能感兴趣的:(python)