【发布时间】:2018-09-11 21:03:26
【问题描述】:
我正在尝试在 Python 3 (Python 3.7.0) 中使用 args 和 kwargs 来解决问题,但我的理解遇到了一些问题。
这是我拥有的一个简单功能:
def add_args(y=10, *args, **kwargs):
return y, args, kwargs
并对其进行测试以查看返回的内容:
print(add_args(1, 5, 10, 20, 50))
print(add_args())
>>
(1, (5, 10, 20, 50), {}) # What happened to my default y=10?
(10, (), {})
我不明白的是,第一个打印语句中的y=10 发生了什么?我可以看到它被args 中的1 覆盖,但我不确定为什么。
如何重写此函数以使默认值不被覆盖,或者我是否遗漏了参数如何从函数签名传递到返回语句的某些内容?
我尝试查找here 和here,但没有找到我想要的答案。正如我认为将默认值放在args 和kwargs 之前可以防止覆盖。
【问题讨论】:
-
如果你不希望它被调用者覆盖,为什么它是一个参数呢?为什么不把
y=10作为正文的第一行? -
在下面查看我的答案,您检查的第一个链接上接受的答案确实正确记录了这一点:将
y=10after*argscatch-all var-positional 参数.
标签: python python-3.x function args keyword-argument