为什么在Python中不能在for循环前使用分号?
我可以在Python中用分号把多行代码连接起来,比如:
a=5; b=10
但是为什么我不能用for循环来做同样的事情呢?
x=['a','b']; for i,j in enumerate(x): print(i,":", j)
6 个回答
1
试试这个。
x=['a','b']; [print(i,":", j) for i,j in enumerate(x)]
2
Python的语法不允许这样做。这是个很好的回答,但为什么会这样呢?
我认为这个决定背后的逻辑是这样的:for循环的内容必须缩进才能被识别。所以,如果我们允许在那儿不写一个simple_stmt
,就会需要复杂且容易出错的缩进方式。
5
因为Python的创始人Guido van Rossum和其他开发者其实不太喜欢那种“用分号和大括号”来格式化代码的风格。
想了解他们对此的看法,可以看看:
from __future__ import braces
在Python中,语句之间应该用空行来分隔,而复合语句则是通过缩进来区分的。
像;
这样的符号和一行的复合语句(比如for i in x: print i
)其实只是非常有限的妥协……而且你不能把它们混在一起用。
25
因为Python的语法不允许这样做。你可以查看这个文档:
stmt_list ::= simple_stmt (";" simple_stmt)* [";"]
分号只能用来分隔简单语句(而不是像for
这样的复合语句)。其实,几乎没有必要即使在这种情况下也使用分号。最好是用单独的行来写代码。Python并不是为了让你方便地把很多代码挤到一行上而设计的。
13
简单来说,答案就是“因为这个语言的语法不允许这样写”。至于为什么会这样,除非你去问设计这个语法的人,不然很难确定原因。不过我想这可能是为了提高可读性,而这也是Python的一个目标之一1。
你为什么要写这么晦涩的代码呢?不如把它分成多行来写:
x = ['a','b']
for i,j in enumerate(x):
print(i, ":", j)
我认为这样写会更清晰。
1 来自import this
:可读性很重要。