为什么在Python之前使用分号才能使用分号?

时间:2014-06-18 18:58:00

标签: python

我可以使用分号来加入Python中的行,例如

a=5; b=10

但为什么我不能为

做同样的事情
x=['a','b']; for i,j in enumerate(x): print(i,":", j)

5 个答案:

答案 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'];

这不能证明子句定义的合理性,因此不能用作复合语句的一部分。因此,您会遇到错误。