只需将默认参数放在*args
:
def foo(a, b=3, *args, **kwargs):
Now, b
如果将其作为关键字参数或第二个位置参数传递,则会显式设置。
例子:
foo(x) # a=x, b=3, args=(), kwargs={}
foo(x, y) # a=x, b=y, args=(), kwargs={}
foo(x, b=y) # a=x, b=y, args=(), kwargs={}
foo(x, y, z, k) # a=x, b=y, args=(z, k), kwargs={}
foo(x, c=y, d=k) # a=x, b=3, args=(), kwargs={'c': y, 'd': k}
foo(x, c=y, b=z, d=k) # a=x, b=z, args=(), kwargs={'c': y, 'd': k}
请特别注意,foo(x, y, b=z)
不起作用,因为b
在这种情况下是按位置分配的。
这段代码也适用于 Python 3。设置默认参数after *args
在 Python 3 中使其成为“仅关键字”参数,可以only按名称指定,而不是按位置指定。如果你想在 Python 2 中使用仅关键字参数,你可以使用 @mgilson 的solution.