args 和 kwargs
有几点需要注意:
-
名称
args和kwargs按惯例使用,它们不是语言规范的一部分。因此,这些是等价的:def func(*args, **kwargs): print(args) print(kwargs)def func(*a, **b): print(a) print(b) -
你可能没有多个
args或多个kwargs参数(但不是必需的)def func(*args1, *args2): # File "<stdin>", line 1 # def test(*args1, *args2): # ^ # SyntaxError: invalid syntaxdef test(**kwargs1, **kwargs2): # File "<stdin>", line 1 # def test(**kwargs1, **kwargs2): # ^ # SyntaxError: invalid syntax -
如果任何位置参数跟随
*args,它们是只能通过名称传递的仅关键字参数。可以使用单个星代替*args来强制值为关键字参数而不提供可变参数列表。仅关键字参数列表仅在 Python 3 中可用。def func(a, b, *args, x, y): print(a, b, args, x, y) func(1, 2, 3, 4, x=5, y=6) #>>> 1, 2, (3, 4), 5, 6def func(a, b, *, x, y): print(a, b, x, y) func(1, 2, x=5, y=6) #>>> 1, 2, 5, 6 -
**kwargs必须在参数列表中排在最后。def test(**kwargs, *args): # File "<stdin>", line 1 # def test(**kwargs, *args): # ^ # SyntaxError: invalid syntax