在 Python 中,*args
和 **kwargs
是两种特殊的参数形式,用于接收可变数量的参数。它们的位置关系如下:
def func(*args, **kwargs):
pass
-
*args
(位置参数):*args
用于接收任意数量的位置参数,并将它们打包成一个元组(tuple)。*args
必须位于所有位置参数的最后一个,即在所有普通位置参数之后。- 在函数内部,可以使用
args
变量来访问这些位置参数。
-
**kwargs
(关键字参数):**kwargs
用于接收任意数量的关键字参数,并将它们打包成一个字典(dict)。**kwargs
必须位于所有参数的最后一个,即在*args
之后(如果有的话)。- 在函数内部,可以使用
kwargs
变量来访问这些关键字参数。
下面是一个示例,演示了 *args
和 **kwargs
的位置关系:
def my_function(a, b, *args, c=10, **kwargs):
print("位置参数 a:", a)
print("位置参数 b:", b)
print("可变位置参数 args:", args)
print("关键字参数 c:", c)
print("可变关键字参数 kwargs:", kwargs)
my_function(1, 2, 3, 4, 5, c=20, d=30, e=40)
输出结果:
位置参数 a: 1
位置参数 b: 2
可变位置参数 args: (3, 4, 5)
关键字参数 c: 20
可变关键字参数 kwargs: {'d': 30, 'e': 40}
在这个例子中,参数的位置关系如下:
- 位置参数
a
和b
在最前面。 - 可变位置参数
*args
紧跟在位置参数之后,接收剩余的位置参数3, 4, 5
。 - 关键字参数
c
在可变位置参数之后,有默认值10
,可以通过关键字参数传递新的值。 - 可变关键字参数
**kwargs
在最后,接收额外的关键字参数d=30, e=40
。
总结:
*args
必须位于所有位置参数之后。**kwargs
必须位于所有参数的最后,包括*args
。- 普通位置参数、
*args
、普通关键字参数和**kwargs
的顺序不能改变。