在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
收集的关键字参数。