在Python中,*args
和 **kwargs
是在函数定义中使用的特殊语法,用于接收不定数量的参数。它们使得函数可以接受比定义时更多的参数,增加了函数的灵活性和重用性。
*args允许你将不定数量的非关键字(位置)参数作为元组传递给函数。当你不知道调用者会传递多少个参数给函数时,这非常有用。
**kwargs
允许你将不定数量的关键字参数作为字典传递给函数。关键字参数是以键值对的形式传递的,**kwargs
将这些参数收集到一个字典中。
非关键字(位置)参数
非关键字参数也称为位置参数,它们是按照在函数定义中的顺序来传递和接收的。这意味着在调用函数时,参数必须按照函数定义的顺序给出,否则会导致错误。
关键字参数
关键字参数允许你在调用函数时通过参数名来指定参数值,而不是依赖于它们的位置。这提供了更大的灵活性,因为你可以在任意顺序中指定参数,只要提供正确的参数名即可。
你可以同时使用*args
和**kwargs
来创建一个可以接受任意数量的位置参数和关键字参数的函数。
def process_data(*args, **kwargs):
print("Positional arguments:")
for arg in args:
print(arg)
print("\nKeyword arguments:")
for key, value in kwargs.items():
print(f"{key}: {value}")
# 调用函数
process_data(1, 2, 3, name="Alice", age=30)
总结
*args
用于收集任意数量的位置参数,通常在函数内部以元组形式访问。**kwargs
用于收集任意数量的关键字参数,通常在函数内部以字典形式访问。- 位置参数:必须按照函数定义的顺序传递,没有默认值时必须提供。
- 关键字参数:可以通过参数名来传递,提供更大的灵活性,可以改变参数的顺序,甚至可以跳过一些有默认值的参数。