首页 > Python笔记 阅读数:31

Python代码缩进规则精讲

学过 C、C++ 或 Java 的读者都知道,在这类编程语言中,通常需要用一对花括号{ }来界定模块的范围(即作用域)。正是因为有了这一对花括号的界定,编译器才可以很容易地知道各个模块的界限所在,但这样一来,也导致了源码编写风格各异。

风格各异的代码会带来混乱性。这种混乱性是有隐患的,因为编程风格不同的人组建成一支开发团队,很容易造成沟通上的困难,从而为代码缺陷(bug)埋下伏笔。未来即使发现代码有问题,维护起来也会比较困难。

通过前面的描述,我们知道,Python 的设计哲学是“给我最优,别让我选”。于是 Python 干脆提供了一个“一刀切”式的强制解决方案—相同层次的代码,必须有等同的缩进。通常,缩进使用单个制表符 Tab 键、2 个空格或 4 个空格来表示可界定代码模块的归属。

虽然 Tab 键或空格均可控制缩进关系,但不建议二者混用。这是因为,代码在跨平台解析时,不同平台对 Tab 键占据几个空格,没有统一的规定。如此一来,很容易导致在一个平台上层次井然有序的代码,换到另外一个平台时却显得参差不齐,从而让代码无法正常工作。因此,选择一种缩进风格,然后持之以恒,方为正道。下面我们以【例 1】来说明代码的缩进关系。

【例 1】在 Python 中运行多行代码(ScoreRank.py)
#这是一个演示while循环的范例
while True:
    score = int(input("Please input your score : "))
    if 90 <= score <= 100:
        print('A')
    elif score >= 80:
        print('B')
    elif score >= 70:
        print('C')
    elif score >= 60:
        print('D')
    else:
        print (' ' '你的分数有点低! ' ' ')
现在简单介绍一下例 1 中涉及的语法。第 03~13 行都属于 while 循环的管辖范围,这是因为从 while 的下一行开始(第 03 行),这些行都被统一缩进 1 个 Tab 键。

再细分一下,第 05 行隶属于第 04 行的管辖范围(因为第 05 行相对于第 04 行有 1 个 Tab 键的缩进),第 07 行隶属于第 06 行的管辖范围,以此类推。一言以蔽之,在 Python 中,等级森严,同一级别的代码必须具备相同的缩进量,如图 1 所示。

Python代码缩进关系示意图
图 1:Python 代码缩进关系示意图

除了用统一的缩进表明隶属关系,Python 还规定,要在上一行的末尾,用一个半角的冒号:来彰显自己的“势力范围”。现在再来仔细观察一下图 1 所示的代码,它们都具备这样的特征。

正因为如此,在程序员圈子里,流传着这样的笑话:开发 Python 代码,需要购买游标卡尺。事实上,诸如 Spyder、PyCharm 等 IDE 工具都提供了代码自动对齐的功能,即输入正确的冒号并按回车键之后,第二行会自动缩进,所以我们无须过分担心。

相关文章