Python函数可变参数:*args和**kwargs的使用
Python函数的参数列表中可以使用*args和**kwargs来实现可变参数,这两种参数类型在函数调用中非常便利,可根据需要传入任意数量的参数,无需提前指定数量。
*args表示将所有的输入参数打包成一个元组(tuple)形式的参数,**kwargs则表示打包所有的关键字参数成为一个字典(dict)形式的参数。下面我们来分别介绍这两种参数类型的使用。
使用*args实现可变参数
定义函数时,如果在参数列表前面加上*,则表示这个参数将会接收任意数量的参数。
例如:
def sum_nums(*args):
result = 0
for num in args:
result += num
return result
这个函数接收任意多个参数,并返回它们的总和。可以看到,我们在函数参数前面加了一个星号,这样就能将所有的参数都打包成一个元组,args就是这样一个元组,它包含了所有传入函数的位置参数。
下面是函数调用的一个例子:
print(sum_nums()) # 0 print(sum_nums(1, 2, 3)) # 6 print(sum_nums(1, 2, 3, 4, 5)) # 15
可以看到,在不传入任何参数时,这个函数返回0;在传入1、2、3这三个参数时,返回它们的和6;在传入1、2、3、4、5这五个参数时,返回它们的和15。
使用**kwargs实现可变参数
除了使用*args来实现可变参数,还可以使用**kwargs来接收任意数量的关键字参数。
例如:
def print_info(**kwargs):
for key, value in kwargs.items():
print(f'{key}: {value}')
这个函数接收任意数量的关键字参数,并将它们按照“键-值”对的形式打印出来。我们在函数参数前面加了两个星号,这样就能将所有的关键字参数都打包成一个字典,kwargs就是这个字典,它包含了所有传入函数的关键字参数及其对应的值。
下面是函数调用的一个例子:
print_info(name='Jack', age=20, gender='male')
这个函数调用传入了三个关键字参数:name、age、gender。函数在运行时会自动将它们打包成字典,并输出每个键值对的值。
需要注意的是,*args和**kwargs可以同时出现在一个函数定义中,它们的顺序应该是先*args,然后**kwargs,例如:
def func(*args, **kwargs):
...
这样定义的函数可以接收任意数量的位置参数和关键字参数。
总结
使用*args和**kwargs实现可变参数,在函数定义时非常方便,能够接收任意数量的位置参数和关键字参数。在函数调用时,我们可以随意传入参数,无需在函数定义时指定参数数量。这些参数将被打包成元组或字典的形式,方便函数内部进行处理。
