为了解释为什么提出这个问题,我将解释python3常用的多行列表/字典符号以及实际的语法定义是什么。
这是python3中最常用的多行列表符号:
list_variable = [
'value1',
'value2',
# The last comma after 'value2' is sometimes omitted.
]
并且,要了解解析器如何识别此符号,我们需要查看语法定义(link)。
在python的定义中,类似列表的定义与此类似:
list_like: '[' [element (',' element)* [','] ] ']'
如果您不熟悉语法定义或者我是一个糟糕的摘要者,请允许我多解释一下:
''
表示它实际上是一个字符。例如,'['
和']'
是列表的结尾或开头,以纯字符表示,它们将是 ['value1','value2',] 在实际代码中。
element
是其类型的预期元素。例如,如果是列表,它将是单个变量。如果是字典,则为key ':' value
。
[]
表示其中的所有可选内容。
()
表示内部的所有事物都在一个集合中。即所有内容都融合在一起。
*
表示之前的语法集,该语法集可能出现0次或多次。在此示例中,(',' element)
可以省略,但也可以出现3次。
我几乎忘了提到,这些规则是在空白管理完成后应用的。
好的,让我们看一下列表的解析示例:
[1]
将被解析为'['
element
']'
[1, ]
将是'['
element
','
']'
[1, 2]
将是'['
element
(',' element)
']'
[1, 2, ]
将是'['
element
(',' element)
','
']'
因此,如您所见,在示例3中,逗号与2
而不是1
配对。
另外,在该示例中,最后一个逗号未与2
配对-实际上,在语法定义方面,它没有任何配对。
现在的实际问题是: 除了大多数语言都普遍使用逗号之外,还有更多理由在换行符之前使用逗号吗? 我认为在换行符后使用逗号是明智的,原因如下:
它更类似于实际的语法定义。
它确保始终有确切数量的逗号(元素数-1),并且在处理讨厌其他引号的语言(例如SQL)时会有所帮助。
< / li>它也是git友好的,如逗号前表示法:如果将新元素添加到列表中,则git diff仅显示+ , new_element
。
实际上,如果有人忘记在old_element
之后添加逗号(或者因为该语言不允许使用其他逗号),则以换行之前的逗号表示,之后添加元素的人将看到git记录如下:
- old_element
+ old_element,
+ new_element,
答案 0 :(得分:1)
(1)“大多数”编程语言没有任何偏好。由程序员决定在何处放置逗号。对于您提到的情况,语言或某些运行时库将某些结构序列化为文本字符串,这是优先考虑的问题,即观点。参见(2)。
(2)我和其他一些人一样,喜欢我的编程语言,看起来像是一些熟悉的符号。在英文散文中,我写的是“ fee,foe,fie,fum”,而不是“ fee,foe,fie,fum”。逗号是分隔的两个元素中的第一个,而不是第二个。在数学上也是如此。