Python函数:如何使用“*args”和“**kwargs”传递变长参数?
当我们定义一个函数时,常常会预先定义参数的个数,但是,在一些情况下,我们需要动态地传递参数,这时候就需要用到Python中支持的变长参数传递方式:“*args”和“**kwargs”。本文主要介绍在Python中使用“*args”和“**kwargs”传递变长参数的方法和注意事项。
1. *args
“*args”是用来传递不定数量的非关键字参数的,也就是说,我们可以使用“*args”来传递任意个数的参数。在函数中,我们可以使用“*args”作为函数参数,使用‘*args’收集多余的位置参数,然后将它们打包成一个元组(tuple)。
下面是一个使用“*args”的例子:
def func(*args):
for arg in args:
print(arg)
func(1, 2, 3, 4, 5)
输出:
1 2 3 4 5
2. **kwargs
“**kwargs”是用来传递不定数量的关键字参数的,也就是说,我们可以使用“**kwargs”来传递任意个数的关键字参数。在函数中,我们可以使用“**kwargs”作为函数参数,使用‘**kwargs’收集多余的关键字参数,然后将它们打包成一个字典(dict)。
下面是一个使用“**kwargs”的例子:
def func(**kwargs):
for key, value in kwargs.items():
print("{} : {}".format(key, value))
func(name="Alice", age=30, gender="female")
输出:
name : Alice age : 30 gender : female
3. *args和**kwargs一起用
当我们想同时使用不定数量的非关键字参数和关键字参数时,就可以同时使用“*args”和“**kwargs”。
下面是一个使用“*args”和“**kwargs”一起用的例子:
def func(*args, **kwargs):
for arg in args:
print(arg)
for key, value in kwargs.items():
print("{} : {}".format(key, value))
func(1, 2, 3, name="Alice", age=30, gender="female")
输出:
1 2 3 name : Alice age : 30 gender : female
4. 注意事项
- 调用函数时需要注意传递参数的顺序,先传递非关键字参数(例如:a, b, c),再传递关键字参数(例如:name="Alice")。
- “*args”和“**kwargs”可以与其他参数一起使用,但是需要放在参数列表的末尾。例如:def func(a, b, c, *args, **kwargs)。
- “*args”和“**kwargs”不是必须的,如果不需要使用,则可以不传递它们。
5. 总结
本文介绍了在Python中使用“*args”和“**kwargs”传递变长参数的方法和注意事项。“*args”用于传递不定数量的非关键字参数,而“**kwargs”用于传递不定数量的关键字参数。当我们想同时使用它们时,可以同时使用“*args”和“**kwargs”。在使用时,需要注意传递参数的顺序和放置的位置。
