传递**kwargs和尾随逗号的SyntaxError

Nik*_*s R 16 python syntax-error python-3.x python-3.4

我想知道为什么这是Python 3.4中的SyntaxError:

some_function(
  filename = "foobar.c",
  **kwargs,
)
Run Code Online (Sandbox Code Playgroud)

它在删除之后的尾随逗号时有效**kwargs.

pok*_*oke 13

正如vaultah所指出的那样(由于某种原因,他没有费心去发布答案),这是在问题跟踪器上报告的,并且自那以后一直有所改变.从Python 3.6开始,语法将正常工作.

要明确,是的,我想在*argsor 之后允许尾随逗号**kwds.这就是补丁的作用.- Guido van Rossum


Eth*_*man 10

它最初被禁止的原因是因为它是**kwargs参数列表中最后一个允许的项目 - 没有任何东西可以追随它; 然而,,看起来可能会有更多关注它.

这已经改变,现在我们可以调用多个关键字dicts:

some_func(a, b, **c, **d,)
Run Code Online (Sandbox Code Playgroud)

为了保持一致性,现在在函数的定义和调用中都支持尾随逗号.当一个参数有多个参数或一些长参数时,这非常有用,因此逻辑行分成几个物理行.

尾随逗号在两个位置都是可选的.