缩进
一行左边空出的空白;在 Python 里它就是语法,用来标明哪些语句同属一块。
它是什么
缩进 是一行左边空出来的距离。在 Python 里,它不是排版爱好,它就是语法:解释器用它对齐情况,判断哪些句子属于同一个 选择、同一个 循环、同一个 函数。同一层必须对齐。往右移一层,表示「我在里面」;移回来,表示「我又到了外面」。
if n > 0:
print("正数")
print("可以取倒数")
print("无论 n 为何都会执行")多空的那几格会改变意思:不该进块的句子一旦缩进,就只在条件成立时执行。结构在这里不是装饰,而是模型的一部分。
名字从哪来
indent 的意思是「往里缩一截」。书的段落开头空两格,就是一种缩进。1966 年,彼得·兰丁(Peter Landin)提出用左边空白划分程序块,称作 off-side rule,名字借自足球越位:站错位置就不算数。教学语言 ABC 也用缩进;Python 的设计者吉多·范罗苏姆参加过 ABC,把这个习惯带了过来。社区后来约定:一层通常是四个空格。
许多语言用花括号 {} 包住一块,缩进只是给人看的。Python 把给人看的对齐,变成了给机器看的规则。可读性与可执行性在这一点上被做成了同一件事。
它怎么工作
解释器不看「看起来有点空」,它数的是空格(或制表符)的数量。同一块里的行必须完全一致。空格和 Tab 混用,是最常见的 IndentationError 来源。冒号 : 表示「下面将开始一块」。没有紧跟缩进,结构就是空的,通常不是问题所要的模型。
注释 可以跟在一行后面,不参与缩进层级的计算;但注释所在行本身仍要处于正确的层级,否则会把结构弄乱。缩进管的是「谁属于谁」,不是空几格就运算几次。重复要靠循环或 递归。
生活里在哪里
大纲的章、节、条用缩进表示从属;实验报告里「步骤 2 的子步骤」往右移一截;法律条文的款项也靠层级表明效力范围。这些文本里,对不齐通常只是难看。Python 里,对不齐会使程序无法运行,或在能运行时悄悄改变哪一句属于哪一个判断。阅读别人的代码时,先看缩进,往往比先看关键词更能看出结构。
和相近概念的差别
花括号语言把块的边界交给标点,把对齐交给审美。Python 取消了这层分工。这并不使缩进成为一种循环:它不重复任何步骤,只声明范围。缩进写对、却深到人跟丢层次,是另一件事,见 缩进地狱。
生成工具起草的代码有时会混用空格与制表符,或把本该平级的句子推进去一层。验收时检查缩进,就是在检查模型的层次有没有被写乱。见 对话式编程。
常见误会
误会 1:缩进只是为了好看。
对不齐,程序直接无法运行。即使勉强对齐得「看起来差不多」,空格数量不一致仍会报错。
误会 2:有时用两个空格,有时用四个,反正「有空」就行。
同一层必须一样。选定四个空格,整份代码坚持下去。
误会 3:把不该进块的句子也缩进去,只影响版式。
它就会只在条件成立时执行。层次写错,等于判断写错。
想知道更多
- 书:埃里克·马瑟斯《Python编程:从入门到实践(第3版)》
- 书:艾伦·唐尼《像计算机科学家一样思考Python(第2版)》
- 书:布鲁克希尔《计算机科学概论》
未登录时不会保存学习进度