Python可变参数使用详解:*args和**kwargs
在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之前。
