Python:在catch-all参数后的尾随逗号

Python:在catch-all参数后的尾随逗号,python,syntax,Python,Syntax,我对函数参数列表中的尾随逗号感到困惑: def(*args,):通过 为我赢得一个SyntaxError例外。在python 3中,即使这样: def(*,arg=1,):通过 引发语法错误异常。两者都指向闭括号 去掉后面的逗号,一切都是安静的。 我在挠头,但不知何故,这超出了我的理解范围(可能也是错误的……至少,在我的浏览器呈现中,我无法将参数列表定义中的最后一个右括号配对)。 我做错什么了吗? 我是第一个 def(*, a:“文件a”=1, b:“文件b”=2, c:“文件c”=3, d

我对函数参数列表中的尾随逗号感到困惑:

def(*args,):通过
为我赢得一个
SyntaxError
例外。在python 3中,即使这样:

def(*,arg=1,):通过
引发语法错误异常。两者都指向闭括号

去掉后面的逗号,一切都是安静的。 我在挠头,但不知何故,这超出了我的理解范围(可能也是错误的……至少,在我的浏览器呈现中,我无法将
参数列表
定义中的最后一个右括号配对)。 我做错什么了吗? 我是第一个

def(*,
a:“文件a”=1,
b:“文件b”=2,
c:“文件c”=3,
d:“文件d”=4,
#…也许更多,
)
这种类型的人,这个问题让我有点恼火(也许这是错误的部分,我应该成为
,一个:“doca”=1
类型的人——但我觉得这看起来很奇怪)


使用Gentoo ebuilds dev lang/python 2.7.12和3.5.2(from)中分发的python。

参数列表中的尾随逗号被视为由逗号分隔的多个值

a = (4)
type (a)

>> output: int


a = (4,)
type (a)

>> output: tuple
因此,如果函数的参数后面有逗号,python认为应该有一个值,但实际上没有,因此会引发语法错误

另一方面,列表中的尾随逗号也可以

list1 = [ 0, 1, 2, 3, ]

>> totally fine

支持在catch all参数后使用尾随逗号


它在3.5中不受支持,这解释了当您没有更多的函数参数时,为什么要在末尾加逗号?@be_good\u do_good:后面的逗号更容易重新排列参数或添加新参数。它是关于编辑的便利性和维护的简易性。当然,在功能方面没有区别。@be_good_do_good:在添加/删除/重新订购行时,为了一致性和更小的版本差异。很多风格指南都鼓励它们,包括PEP8(如果我没记错的话)。嗯,
delf(a,):pass也很好。OP询问的是函数定义中的逗号,而不是调用序列中的逗号。