我可以使用分号来加入Python中的行,例如
a=5; b=10
但为什么我不能为
做同样的事情x=['a','b']; for i,j in enumerate(x): print(i,":", j)
答案 0 :(得分:17)
因为Python语法不允许它。见the documentation:
stmt_list ::= simple_stmt (";" simple_stmt)* [";"]
分号只能用于分隔简单语句(而不是像for
这样的复合语句)。而且,实际上,即使这样,也几乎没有理由使用它们。只需使用单独的行。 Python并不是为了方便将大量代码插入一行而设计的。
答案 1 :(得分:13)
简短(但有效)答案只是"因为语言grammar未被定义为允许它"。至于为什么 由于可读性,这是Python 1 的目标之一。
为什么你会想写一些像这样模糊不清的东西?只需将其分成多行:
x = ['a','b']
for i,j in enumerate(x):
print(i, ":", j)
我认为这种变体更加清晰。
1 来自import this
:可读性计数。
答案 2 :(得分:4)
因为Python的创建者和其他开发人员Guido van Rossum实际上并不喜欢代码格式的“分号和括号”样式。
要简要了解一下他们对这些事情的感受,请尝试:
from __future__ import braces
Python中的语句应该用空行分隔,Python中的复合语句应该以缩进为界。
;
和单行复合语句(例如for i in x: print i
)的存在只是非常有限的让步...而你无法将它们合并
答案 3 :(得分:1)
Python的语法不允许这样做。这是一个很好的答案,但是它的原因是什么?
我认为决定背后的逻辑如下:for循环的主体必须缩进才能被识别。因此,如果我们在那里不允许simple_stmt
,则需要复杂且易于破解的缩进。
答案 4 :(得分:0)
复合语句由一个或多个“子句”组成。子句由标题和“套件”组成。特定复合语句的子句标题都在相同的缩进级别。每个子句头以唯一标识关键字开头,以冒号结束。套件是由子句控制的一组语句。套件可以是与标题位于同一行的一个或多个以分号分隔的简单语句,位于标题的冒号后面,也可以是后续行中的一个或多个缩进语句。
x=['a','b'];
这不能证明子句定义的合理性,因此不能用作复合语句的一部分。因此,您会遇到错误。