欢迎访问宙启技术站
智能推送

Python可变参数使用详解:*args和**kwargs

发布时间:2023-06-20 03:28:07

在Python中,函数的参数可以分为两种:必需参数和可选参数。其中,必需参数是指在调用函数的时候必须传递的参数,可选参数是指在调用函数的时候是可选的参数。而在可选参数中,又可以分为默认参数和可变参数。

默认参数是指在定义函数的时候给某个参数设定默认值,如果在调用函数的时候没有传递该参数,那么就会使用默认值。而可变参数则是指在调用函数的时候不确定参数个数,而是传递一个可变长度的参数列表。

在Python中,可变参数可以使用两种方式来定义:*args和**kwargs。

一、*args

*args是用来表示一个可变长度的非关键字参数列表,它可以在函数中接受任意数量的参数。例如:

def my_func(*args):
    for arg in args:
        print(arg)

在上面的函数中,*args表示一个可变长度的参数列表,可以接受任意数量的参数。当函数被调用时,被传递的参数会被打包成一个tuple,并将这个tuple赋值给args变量。例如:

my_func(1, 2, 'a', 'b')

这个函数将会输出:

1
2
a
b

二、**kwargs

除了*args,还有另一种可变参数的方式,那就是使用**kwargs。**kwargs表示一个可变长度的关键字参数列表,它可以在函数中接受任意数量的关键字参数。例如:

def my_func2(**kwargs):
    for key, value in kwargs.items():
        print(key, value)

在上面的函数中,**kwargs表示一个可变长度的关键字参数列表,可以接受任意数量的关键字参数。当函数被调用时,被传递的关键字参数会被打包成一个字典,并将这个字典赋值给kwargs变量。例如:

my_func2(name='Tom', age=25, sex='male')

这个函数将会输出:

name Tom
age 25
sex male

需要注意的是,在定义可变参数的时候,如果同时使用*args和**kwargs,那么*args必须放在**kwargs之前,否则会报错。

def my_func3(a, b, *args, **kwargs):
    pass

在上面的函数中,a和b是必需参数,*args表示可变长度的非关键字参数列表,**kwargs表示可变长度的关键字参数列表。

总结:

- *args表示一个可变长度的非关键字参数列表,可以在函数中接受任意数量的参数,被传递的参数会被打包成一个tuple,并将这个tuple赋值给args变量。

- **kwargs表示一个可变长度的关键字参数列表,可以在函数中接受任意数量的关键字参数,被传递的关键字参数会被打包成一个字典,并将这个字典赋值给kwargs变量。

- 如果同时需要使用*args和**kwargs,那么*args必须放在**kwargs之前。