返回介绍

为什么使用缩进语法

发布于 2024-01-29 22:24:16 字数 2760 浏览 0 评论 0 收藏 0

对于习惯了类C语言的程序员而言,缩进规则乍一看可能会有点特别,但是这正是Python精心设计的特点,是Python迫使程序员写出统一、整齐并具有可读性程序的主要方式之一。这就意味着你必须根据程序的逻辑结构,以垂直对齐的方式来组织程序代码。结果就是让程序更一致并具有可读性(不像类C语言所写的多数程序那样)。

更明确地讲,根据逻辑结构将代码对齐是令程序具有可读性的主要部分,因而具备了重用性和可维护性,对自己和他人都是如此。实际上,即使你在看过本书之后不使用Python,也应该在任何块结构的语言中对齐代码让程序更具可读性。Python将其设计为语法的一部分来强制程序的书写,但这也是在任何程序语言中都非常重要的一点,并对代码起重要的作用。

大家的经历可能不同,但当我还在做全职基础开发的时候都是在处理许多程序员做过很多年的大而老的C++程序。几乎不可避免的是,每位程序员都有自己的缩进代码的风格。例如,别人总叫我修改用C++写的while循环,开头是这样的:

在我们深入研究缩进之前,有三四种供程序员在类C语言程序中安排大括号的方式,通常有官方的争论以及编写标准手册说明相关选项(似乎距离我们需要用程序解决的问题有点太远了)。我们先看一下时常在C++代码中碰到的情况。第一个写代码的人的缩进为四个空格:

这个人后来挤进管理层,只能由某个喜欢再往右缩进一点的人来接替他的位置:

那个人后来又遇到了其他的机会,而某个接手这段代码的人喜欢少缩进一些:

最后,这个代码块由关闭大括号(})终止,大括号当然能“让代码变成块结构了”(他刺地说)。在任何代码块结构的语言中,无论是Python还是其他语言,如果嵌套代码块缩进的不一致,它们将很难解释、修改或者再使用,因为代码不再能形象地反应其逻辑含义。可读性是很重要的,缩进又是可读性的主要元素。

如果你用类C语言写过很多程序的话,可能你曾经为下面的例子头疼过。考虑下面这个C语言的语句:

这个else是属于哪个if的呢?令人吃惊的是,这个else是属于嵌套的if语句[if(y)],即使它看上去很像是属于外层if(x)的。这是C语言中经典的陷阱,而且可能导致读者完全误解代码并用不正确的方式进行修改还一直找不出原因,直到产生巨大的错误为止!

这种事在Python中是不可能发生的:因为缩进很重要,程序看上去什么样就意味着它将如何运行。考虑一个等价的Python语句:

这个例子里,else垂直对齐的if就是其逻辑上的if(外层的if x)。从某种意义上来说,Python是WYSIWYG语言——所见即所得(what you see is what you get)。因为不管是谁写的,程序看上去的样子就是其运行的方式。

如果这样还不足以突显Python语法的优点的话,来听听下面这个故事。在我职业生涯的早期,我在一家成功地用C语言开发系统软件的公司工作,C语言并不要求一致的缩进。即使是这样,当我们在下班之前把程序代码上传到源代码控制系统的时候,公司会运行一个自动化的脚本来分析代码中的缩进。如果这个脚本检查到我们没有一致的缩进程序代码,我们将会在第二天早上收到自动发出的关于此事的电子邮件,同时我们的老板们也会收到!

我的意思是,即使是某个不要求这样做的语言,优秀的程序员都知道一致地使用缩进对于程序代码的可读性和质量有着至关重要的作用。Python将它升级到语法层次的事实,被绝大多数人视为是语言的特色。

最后,记住一点,目前几乎每个对程序员友好的文本编辑器都有对Python语法模型的内置支持。例如,在IDLE Python GUI中,当输入嵌套代码块时代码行会自动缩进,按下Backspace键会回到上一层的缩进,你可以在嵌套块里面调整IDLE将语句往右缩进多少。

缩进没有绝对的标准:常见的是每层四个空格或一个制表符,但是你想怎么缩进以及缩进多少都由你自己决定。嵌套越深的代码块向右缩进的越厉害,越浅就越靠近前一个块。

作为首要的规则,不应该在同一段Python代码中混合使用制表符和空格,除非你一贯这么做;在一段给定的代码中,使用制表符或空格,但不要二者都用(实际上,Python 3.0现在发布了一个关于使用制表符和空格的不一致性的错误,参见本书第12章的介绍)。但是,不应该在任何结构化语言中混合使用制表符和空格来缩进——如果下一位程序员用与你不同的自己的编辑器来显示制表符,这样的代码可能会引发较大的可读性问题。类C的语言可能会使程序员绕过这样的问题,但是,它们不应该这么做:结果会被搞得乱糟糟的。

不管用何种语言编写代码,都应该一致地缩进以保持可读性,这一点无论怎么强调都不过分。实际上,如果你在此前的职业生涯中没有学习如何做到这点,你的老师可能给你留下了伤害。大多数程序员,尤其是那些必须阅读其他人的代码的程序员,认为这是提升自己的Python语法级别的重要资本。此外,生成制表符来代替大括号,对于必须输出Python代码的工具而言在实践中不再是什么困难。总的来说,还是按照你在类C语言中该做的那样去做,不过无论如何都要去掉大括号,这样你的程序代码就满足Python的语法规则了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文