Jan*_*ora 5 python args optional-arguments python-3.x
def f(a, b, *args):
return (a, b, args)
f(a=3, b=5)
(3, 5, ())
Run Code Online (Sandbox Code Playgroud)
然而:
f(a=3, b=5, *[1,2,3])
TypeError: got multiple values for argument 'b'
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
任何特殊原因?
如果语法
*expression出现在函数调用中,则表达式必须求值为iterable.来自这些迭代的元素被视为它们是附加的位置参数.对于调用f(x1, x2, *y, x3, x4),如果y求值为序列y1, ..., yM,则这相当于具有M+4位置参数的调用x1, x2, y1, ..., yM, x3, x4.
然后,接下来是:
这样做的结果是虽然
*expression语法可能出现在显式关键字参数之后,但它在关键字参数之前处理(以及任何**expression arguments- 参见下文).
(强调我的)
因此,Python将首先处理*args作为位置参数,为其赋值b并重新赋值,b=5从而导致具有多个值的关键字参数出错.
| 归档时间: |
|
| 查看次数: |
1980 次 |
| 最近记录: |