*args
仅捕获未另行定义的任何位置参数;
y=10
并不意味着
y
不能用作位置参数。所以
Y
指定第一个位置参数。
你可以阻止
Y
通过使其成为
keyword-only
argument
. 你这样做是通过提出论点
之后
这个
*精氨酸
var positional catch all参数,或者如果没有
*name
参数,在
*
单个星号:
def add_args(*args, y=10, **kwargs):
return y, args, kwargs
或
def keyword_only_args(*, y=10, **kwargs):
return y, kwargs
现在
Y
将不再捕获位置参数:
>>> def add_args(*args, y=10, **kwargs):
... return y, args, kwargs
...
>>> add_args(1, 5, 10, 20, 50)
(10, (1, 5, 10, 20, 50), {}) # y is still 10
>>> add_args(1, 5, 10, 20, 50, y=42) # setting y explicitly
(42, (1, 5, 10, 20, 50), {})
你不需要
**kwargs
关键字catch all要么:
def add_args(*args, y=10):
return y, args
但如果它存在,它需要列在最后。
仅限关键字的参数不必具有默认值,
=10
可以省略,但随后该参数变为必需的,并且只能通过使用
y=value
:
>>> def add_args(*args, y): # mandatory keyword-only argument
... return y, args
...
>>> add_args(1, 5, 10, 20, 50)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: add_args() missing 1 required keyword-only argument: 'y'
>>> add_args(1, 5, 10, 20, 50, y=42)
(42, (1, 5, 10, 20, 50))