【发布时间】:2016-01-25 19:55:23
【问题描述】:
我想知道为什么这是 Python 3.4 中的 SyntaxError:
some_function(
filename = "foobar.c",
**kwargs,
)
在删除**kwargs 之后的尾随逗号时有效。
【问题讨论】:
标签: python python-3.x syntax-error python-3.4
我想知道为什么这是 Python 3.4 中的 SyntaxError:
some_function(
filename = "foobar.c",
**kwargs,
)
在删除**kwargs 之后的尾随逗号时有效。
【问题讨论】:
标签: python python-3.x syntax-error python-3.4
它最初被禁止的原因是因为**kwargs 是参数列表中最后一个允许的项目——在它之后没有任何内容;但是,, 看起来可能会有更多人关注它。
这已经改变,所以我们现在可以使用多个关键字字典调用:
some_func(a, b, **c, **d,)
为了保持一致性,现在在函数的定义和调用中都支持尾随逗号。这在一个有多个参数或几个长参数时非常有用,因此逻辑行被分割成多个物理行。
尾随逗号在两个位置都是可选的。
【讨论】:
**c, **d 部分很好奇。 Python 怎么知道在 c 和 d 中放入哪些关键字参数?
正如 vaultah 所指出的(由于某种原因,他没有费心发布答案),这是reported on the issue tracker,此后已更改。从 Python 3.6 开始,该语法可以正常工作。
明确地说,是的,即使在
*args或**kwds之后,我也希望允许尾随逗号。这就是补丁的作用。 ——Guido van Rossum
【讨论】: