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

时间:2016-08-09 02:37:41

标签: python syntax

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

def f( *args, ): pass

给我一​​个SyntaxError例外。在python 3中,即便如此:

def f( *, arg = 1, ): pass

引发语法错误异常。两者都指向闭括号。

删除尾随的逗号,一切都很安静。 我在https://docs.python.org/3/reference/compound_stmts.html#function-definitions上摸不着头脑,但它在某种程度上超出了我(也可能是错误的...至少,在我的浏览器渲染中我无法将parameter_list定义中的最后一个右括号配对) 。 难道我做错了什么? 我是

def f(*,
      a: "doc A" = 1,
      b: "doc B" = 2,
      c: "doc C" = 3,
      d: "doc D" = 4,
      # ... and maybe more,
     )

类型的人,这个问题有点让我烦恼(也许这是错误的部分,我应该成为, a: "doc A" = 1类型的人 - 但它对我来说看起来很奇怪。)

在Gentoo ebuilds dev-lang / python 2.7.12和3.5.2(来自http://www.python.org)中使用python。

2 个答案:

答案 0 :(得分:2)

支持在全能参数 was added in python 3.6 后面使用尾随逗号。

3.5 中不支持它解释了您的 print("Function for hiding the cell") hide_toggle()

答案 1 :(得分:-2)

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

a = (4)
type (a)

>> output: int


a = (4,)
type (a)

>> output: tuple

因此,如果函数的参数有一个尾随逗号,python认为应该有一个值但是没有,所以它会引发语法错误。

另一方面,列表中的尾随逗号很好。

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

>> totally fine