【发布时间】:2013-06-05 21:42:18
【问题描述】:
为什么不能在 Python 中使用带有 *args 的尾随逗号?换句话说,这行得通
>>> f(1, 2, b=4,)
但这不是
>>> f(*(1, 2), b=4,)
File "<stdin>", line 1
f(*(1, 2), b=4,)
^
SyntaxError: invalid syntax
Python 2 和 Python 3 都是这种情况。
【问题讨论】:
-
可能与
(1,)创建元组的方式有关。 -
显然关键字 args 是无关紧要的。
f(*args,)也是不允许的。 -
@user2246674 “为什么”并非无关紧要——这正是问题的重点。 Python 等语言的语法经过精心设计,在可读性、易用性、易解析性、向后兼容性等方面投入了大量考虑。除了 i> 在
*args之后,对此原因感到好奇是合理的。如果您不同意,那么还有许多其他问题需要回答。 -
@user4815162342:我不同意。我认为规范可以在这里使用一些工作。
f(x=1, *(2, 3))是允许的,但f(x=1, 2, 3)是不允许的。允许f(1, 2, x=3,),但不允许f(*(1, 2), x=3,)。 -
@sharth 由于您自己的回答表明实现与规范不符,因此不妨说应该修复的是实现。无论哪种方式,这都与询问当前行为为何如此的问题的合法性正交。这个问题的答案可能是一个简单的疏忽(正如我在第一条评论中提到的)或一个实现错误——Python 语法可能经过精心设计,但没有人是完美的。
标签: python syntax python-internals