数据结构与算法(Python版)
上QQ阅读APP看书,第一时间看更新

2.4 代码书写规则

2.4.1 缩进

程序设计强调“清晰第一,效率第二”,应注意程序代码书写的格式。如果所有程序代码语句都从最左一列开始,则很难清楚程序语句之间的关系。因此针对判断、循环等语句可按一定的规则进行缩进,使得代码具有层次性,可读性也大为改善。

程序设计语言对于缩进有不同的要求,C语言中的缩进对于代码的编写来说是“有了更好”,而不是“没有不行”,仅作为书写代码风格;Python语言则将缩进作为语法要求,通过使用代码块的缩进来体现语句的逻辑关系,行首的空白称为缩进,缩进结束就表示一个代码块结束了。C语言与Python语言缩进对比如图2.29所示。

图2.29 C语言与Python语言缩进对比

2.4.2 逻辑行与物理行

物理行是书写程序代码的表现形式。逻辑行是程序设计语言解释的代码形式中的单个语句。程序设计语言一方面希望物理行与逻辑行一一对应,每行只有一个语句,便于代码理解;另一方面希望书写灵活。以Python语言为例,其书写规则如下所述。

1)Python中每个语句以换行结束。

2)一个物理行中若使用多于一个逻辑行,即多条语句书写在一行,则使用分号(;),举例如下。

3)当语句太长时,也可以一条语句跨多行书写,即多个物理行写一个逻辑行,使用反斜线(\)作为续行符。

例2-1】反斜线(\)举例。

与如下写法效果相同。

但是,当语句中包含[]、{} 或()就不需要使用多行连接符。举例如下。

2.4.3 注释

注释可以帮助读者思考每个过程、每个函数及每条语句的含义,便于编程员的相互讨论,有利于程序的维护和调试。一般情况下,源程序中有效注释量占总代码的20%以上。

程序的注释分为序言性注释和功能性注释。

● 序言性注释:位于每个模块开始处,作为序言性的注解,简要描述模块的功能、主要算法、接口特点、重要数据及开发简史。

● 功能性注释:插在程序中间,与一段程序代码有关的注解,是针对一些必要的变量、核心的代码进行解释,主要解释这段代码的功能。

以Python为例,注释有如下一些约定。

● 注释可以添加在代码中的任意位置,但不能添加在字符串中。

● 若要将注释追加到某语句,可在该语句前后插入一个#号,后面添加注释。

● 注释还可以位于单独的行中,一般位于所要注释的代码上一行。

1.单行注释行注释

Python中#表示单行注释。单行注释可以作为单独的一行放在被注释代码行之上,也可以放在语句或表达式之后。

2.多行注释块注释

当注释内容过多,一行无法显示时,可以使用多行注释。Python中使用3个单引号或3个双引号表示多行注释。

2.4.4 编码风格

良好的编码风格有助于编写出可靠、易于维护的程序,在很大程度上决定着程序的质量。下面列出了常用的编码风格。

● 复杂的表达式使用“括号”优先级理,避免二义性。

● 单个函数的代码量最好不要超过100行。

● 尽量使用标准库函数和公共函数。

● 不要随意定义全局变量,尽量使用局部变量。

● 保持注释与代码完全一致,修改了代码不要忘记修改注释。

● 循环、分支层次最好不要超过5层。

● 在编程序前,尽可能化简表达式。

● 仔细检查算法中嵌套的循环,尽可能将某些语句或表达式移到循环外面。

● 尽量避免使用多维数组。

● 避免混淆数据类型。

● 尽量采用算术表达式和布尔表达式。

● 保持控制流的局部性和直线性。控制流的局部性是为了提高程序的清晰度和易修改性,防止错误的扩散。控制流的直线性主要体现在两个方面:一是对多入口和多出口的控制结构要作适当的处理;二是结构化程序的主要特点是单入口和单出口,保持控制流的直线性使之清晰易懂。其中,高级语言为提前退出循环提供了专用语句。