学径 LearnPath

CAICP-E · Python 编程基础 / Wiki

缩进

左边空几格,用来告诉电脑「谁属于谁」。

它是什么

缩进 就是一行左边空出来的距离。 在 Python 里,它不是装饰。 它就是语法。

很多语言用花括号 {} 把一捆句子包起来。 Python 不这么做。 它看你左边空了几格,来判断谁属于谁。

同一层的句子必须对齐。 往右移一层,表示「我在里面」。 移回来,表示「我又到外面了」。

python
print("第一")
print("第二")

这两行平级。 谁也不属于谁。

名字从哪来

缩进的英文是 indent,意思是「往里缩一截」。 书的段落开头空两格,就是一种缩进。

1966 年,英国计算机科学家彼得·兰丁(Peter Landin)写了一篇著名文章,叫《接下来的 700 种编程语言》。 他提出用左边空白来划分程序块,并给它起名叫 off-side rule。 这个名字借用了足球的越位规则:站到不该站的位置,就不算数。

后来的教学语言 ABC 也用缩进。 Python 的发明人吉多·范罗苏姆参加过 ABC,把这个习惯带了过来。

后来大家约定:一层通常空 4 个空格。 不要空格和 Tab 键混用。

它怎么工作

冒号 : 后面,通常下一行就要缩进。 ifelifelseforwhiledef 都这样。

属于 iffor 的句子,要往右移:

python
if True:
    print("我在里面")
print("我在外面")

里面那行多空 4 格。 外面那行无论真假都会跑。

嵌套 时再空一层。 两层就是 8 个空格。

python
for i in range(2):
    for j in range(2):
        print(i, j)

用眼睛看左边齐不齐。 也可以用手指比。

空错了,常见有两种报错:

  • IndentationError:缩进不合法
  • TabError:空格和 Tab 混在一起了

它们都属于 调试 时要先看的信号。

括号 ()[]{} 里面的换行,Python 会稍微宽容一些。 但属于 if / for / 函数身体的那些行,对齐必须认真。

生活里在哪里

  • 作文分段:新段落开头空格,表示「这里换一层意思」。
  • 提纲:大标题顶格,小标题往里缩,谁属于谁一眼能看出来。
  • 队列:同一排对齐,出列的人明显站在另一层。
  • 大纲里的项目符号:再缩一层,就是子条目。

在 C、Java、JavaScript 里,花括号说了算,缩进主要给人看。 在 Python 里,缩进同时给人和电脑看。 写整齐,既是礼貌,也是语法。

和相近概念的差别

缩进管的是「属于谁」。 注释 管的是「为什么」。 嵌套 管的是「里面还有一层」。

嵌套一定带来更深的缩进。 但空几格本身不是嵌套的目的,只是记号。

也不要把缩进和空行搞混。 空行是上下隔开,让人好读。 缩进是左右移动,改变结构。

else 对齐谁,就跟谁。 对齐看错,路就走错。

常见误会

误会 1:空格无所谓。

在 Python 里,空格常常就是语法。 缩进错了,程序直接不跑。

误会 2:空 2 格、空 4 格、按一次 Tab,都一样。

一层请固定 4 个空格。 混用最容易变成看不懂的报错。

误会 3:看起来差不多齐就行。

电脑数的是空格个数,不是「好像齐」。 有的行 3 格、有的行 4 格,它不认。

误会 4:缩进了不该缩进的行也没关系。

多空的那行会变成「里面的人」。 条件不成立时,它可能根本不跑。

误会 5:只有 if 需要缩进。

for、while、def,凡是冒号开头的一块,都要缩进。

想知道更多

  • 书:潘洪波《小学生 Python 趣味编程》(用对齐的代码块练「谁属于谁」)。
  • 书:埃里克·马瑟斯《Python 编程:从入门到实践》(一打开就能看见:同一层代码左边总是齐的)。

未登录时不会保存学习进度