【问题标题】:SyntaxError with passing **kwargs and trailing comma传递 **kwargs 和尾随逗号的 SyntaxError
【发布时间】: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


【解决方案1】:

它最初被禁止的原因是因为**kwargs 是参数列表中最后一个允许的项目——在它之后没有任何内容;但是,, 看起来可能会有更多人关注它。

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

some_func(a, b, **c, **d,)

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

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

【讨论】:

  • 谢谢。我对**c, **d 部分很好奇。 Python 怎么知道在 cd 中放入哪些关键字参数?
  • @NiklasR:对不起,那部分错了,更新答案。
【解决方案2】:

正如 vaultah 所指出的(由于某种原因,他没有费心发布答案),这是reported on the issue tracker,此后已更改。从 Python 3.6 开始,该语法可以正常工作。

明确地说,是的,即使在*args**kwds 之后,我也希望允许尾随逗号。这就是补丁的作用。 ——Guido van Rossum

【讨论】:

    猜你喜欢
    • 2019-02-12
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 2014-01-16
    相关资源
    最近更新 更多