·

Python 和这几种语言在语法上的差距比较大。

Python 的初衷是作为一个动态的脚本语言,语句末尾不用分号属于比较常见的情况。对于括号,Python 的语法成分不要求这个东西。

if <condition>:
    ...

带上括号也能成立的原因是 (True) 这个括号表达式的值是 True 本身,所以不影响程序的运行。

C++ 的 for 语句格式是这样的:

for (<init-statement> <condition>; <expression>)
    <statement>

可以看出括号是必要的语法成分。

这里 <init-statement> 后面没有分号的原因是,;<init-statement> 的一部分。

这与语言设计者的理念有关,Python 的设计者认为这几种语句后面使用空格就能够区分各个语法成分,去掉多余的括号会更加简洁。

而 C++、Java、C# 等语言的语法受 C 语言的影响比较深,从 C 继承了一部分语法,就成了现在这个样子,它们也被称为类 C 语言

有趣的是,C 的发明者设计新的语言 golang 时,也去掉了不少的括号。

Replies
1

写完上面的回复后,我意识到一些问题。

为什么 Python 和 Go 可以省略这些括号?

Python 的原因很简单,forifwhile 的起始语句都以 : 结尾,所以能够区分起始语句和它们的语句块。

Go 我并不熟悉,查了一下语言规范,在 Go 中,大括号是强制使用的:

if <simple-stmt> expression {
    ...
}

所以 if 后的起始语句和语句块也能够区分开来。

C 和类 C 语言就不同了,它们的起始语句必须有括号,但语句块可以没有大括号。在 C++ 中,对于以下语句:

for (;;i++) 1;

去掉括号就难以分辨语法成分了。

所以实际上这是一个二选一的问题,总要有一个界定符存在的。