为什么python在元组设计中选择逗号而不是括号?

Kru*_*pös 3 python syntax tuples language-design language-lawyer

来自python wiki

多元素元组

在Python中,多元素元组看起来像:

1,2,3

...

但同样,定义元组的是逗号,而不是括号.

真的吗?!

那么为什么:

>>> tuple((((((1, 2, 3)))))) # creates a valid tuple
# (1, 2, 3)
>>> tuple(1, 2, 3, ) # But not here
# TypeError: tuple() takes at most 1 argument (3 given)
Run Code Online (Sandbox Code Playgroud)

更严重的是,我不明白为什么没有选择括号中的括号?

因为我认为它会在以下情况下产生悖论:

>>> 1, # is a valid tuple
# (1,)
>>> tuple([1]) # Or this
# (1,)
>>> tuple(1) # But not this one
# TypeError: 'int' object is not iterable
Run Code Online (Sandbox Code Playgroud)

但是,如果您认为括号始终负责实例化a tuple,那么实例化tuple多个项目的所有问题 都将消失.

例如在我想象中的世界:

>>> (1, 2, 3) # stay valid
# (1, 2, 3)
>>> (1) # is newly valid
# (1)
>>> () # stay valid
# ()
>>> 1, 
# TypeError: int() takes exactly 1 argument (2 given) 
Run Code Online (Sandbox Code Playgroud)

我知道这是一个众所周知的功能,如果它重复,我已经很抱歉了.我发现了许多关于元组如何工作的类似主题,但没有详细解释为什么这个特性是这样创建的.

我也知道这个主题可以作为基于意见而被关闭,但我最感兴趣的是技术原因(如果有的话),或者至少是历史原因.

谢谢

Ray*_*ger 8

这是语法的工件.

用逗号分隔的术语是元组,列表和集合的构建块,具体取决于它们是用方括号,花括号还是根本没有包装.

指定语法时的主要挑战是平衡相同字符的多个竞争使用.逗号分隔列表,元组,词组和集合的各个部分.逗号还在函数调用中分隔参数.两种用法都允许使用尾随逗号(并且长度为1的元组是必需的).同样,括号有多种用途,包括函数调用和算术表达式分组.该句点用作小数点和getattribute运算符.

  • 没错,括号和逗号都有多种用途。谢谢你的链接。如果这个问题听起来很傲慢,我很抱歉。 (2认同)
  • @MaxChrétien 我认为这是一个完全合理的问题。 (2认同)