- 译者序
- 前言
- 第1章 问答环节
- 第2章 Python 如何运行程序
- 第3章 如何运行程序
- 第4章 介绍 Python 对象类型
- 第5章 数字
- 第6章 动态类型简介
- 第7章 字符串
- 第8章 列表与字典
- 第9章 元组、文件及其他
- 第10章 Python 语句简介
- 第11章 赋值、表达式和打印
- 第12章 if 测试和语法规则
- 第13章 while 和 for 循环
- 第14章 迭代器和解析,第一部分
- 第15章 文档
- 第16章 函数基础
- 第17章 作用域
- 第18章 参数
- 第19章 函数的高级话题
- 第20章 迭代和解析,第二部分
- 第21章 模块:宏伟蓝图
- 第22章 模块代码编写基础
- 第23章 模块包
- 第24章 高级模块话题
- 第25章 OOP:宏伟蓝图
- 第27章 更多实例
- 第28章 类代码编写细节
- 第29章 运算符重载
- 第30章 类的设计
- 第31章 类的高级主题
- 第32章 异常基础
- 第34章 异常对象
- 第35章 异常的设计
- 第36章 Unicode 和字节字符串
- 字符串基础知识
- Python 的字符串类型
- 文本和二进制文件
- Python 3.0 中的字符串应用
- 转换
- 编码 Unicode 字符串
- 编码非ASCII文本
- 编码和解码非ASCII文本
- 其他 Unicode 编码技术
- 转换编码
- 在 Python 2.6 中编码 Unicode 字符串
- 源文件字符集编码声明
- 使用 Python 3.0 Bytes 对象
- 序列操作
- 创建 bytes 对象的其他方式
- 混合字符串类型
- 使用 Python 3.0(和 Python 2.6)bytearray 对象
- 使用文本文件和二进制文件
- Python 3.0 中的文本和二进制模式
- 类型和内容错误匹配
- 使用 Unicode 文件
- 在 Python 3.0 中处理 BOM
- Python 2.6 中的 Unicode 文件
- Python 3.0 中其他字符串工具的变化
- Struct二进制数据模块
- pickle对象序列化模块
- XML解析工具
- 本章小结
- 本章习题
- 习题解答
- 第37章 管理属性
- 第38章 装饰器
- 第39章 元类
- 附录A 安装和配置
- 附录B 各部分练习题的解答
- 作者介绍
- 封面介绍
为什么使用缩进语法
更明确地讲,根据逻辑结构将代码对齐是令程序具有可读性的主要部分,因而具备了重用性和可维护性,对自己和他人都是如此。实际上,即使你在看过本书之后不使用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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论