在Python中,*args 和 **kwargs 是两种传递变量数量的参数到一个函数的方法。它们分别用于处理位置参数和关键字参数。
-
*args:*args允许在函数定义中传入一个非固定数量的位置参数。- 这些参数在函数内部作为一个元组 (
tuple) 访问。 - 可以使用任何名称而不仅仅是
args,但args是常用的约定。关键是前面的*符号。
示例:
def sum_all(*args):return sum(args)print(sum_all(1, 2, 3, 4)) # 输出 10在这个例子中,可以传递任意数量的位置参数给
sum_all函数,它们会被收集到一个元组中。 -
**kwargs:**kwargs允许你在函数定义中传入一个非固定数量的关键字参数。- 这些参数在函数内部作为一个字典 (
dict) 访问。 - 可以使用任何名称而不仅仅是
kwargs,但kwargs是常用的约定。关键是前面的**符号。
示例:
def print_data(**kwargs):for key, value in kwargs.items():print(f"{key}: {value}")print_data(name="John", age=25, country="US")输出:
name: John age: 25 country: US在这个例子中,可以传递任意数量的关键字参数给
print_data函数,它们会被收集到一个字典中。
结合使用:
可以在同一个函数中结合使用*args和**kwargs,但要确保*args出现在**kwargs之前:
def combined_example(x, y, *args, **kwargs):print(x, y)print(args)print(kwargs)combined_example(1, 2, 3, 4, 5, name="John", age=25)
输出:
1 2
(3, 4, 5)
{'name': 'John', 'age': 25}
这里,1和2是普通的位置参数,(3, 4, 5)是通过*args收集的位置参数,而name和age是通过**kwargs收集的关键字参数。