为什么在Python中不能在for循环前使用分号?

21 投票
6 回答
3098 浏览
提问于 2025-04-18 10:16

我可以在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可读性很重要。

撰写回答