2.4 编写容易阅读的代码

当我们对编程的了解越来越多,尤其是熟悉了本书所讨论的Python编程时,我们会发现Python提供了一些语言特定的细节,这些细节可以帮助我们实现这个原则。

本章并不讨论语言的这些特定的细节。现在需要记住的是,在开始编写代码之前,我们就要想到自己所编写的代码可能会被其他人所阅读,自己也可能在几星期之后阅读。

2.4.1 使用描述性和有意义的名称

下面是一小段Python代码,我们现在并不需要理解它们的具体含义。这段代码由3行代码组成,从上到下依次执行。注意,它看上去有点像我们在数学课上所写的式子:

a = 3.1
b = 2.2
c = a * b * b

站在较高的层面上,我们能不能看出它进行的是什么计算?很难。假设把它改写为:

pi = 3.1
radius = 2.2
# 使用公式计算圆的面积
circle_area = pi * radius * radius

现在,我们能不能看出这些代码的用途?是的!它用来计算(或者估计)一个半径为2.2的圆的面积。和数学一样,编程语言使用变量存储数据。在编程时编写容易阅读的代码的一个关键思路就是使用描述性和有意义的变量名。在前面的代码中,pi是变量名,我们用它来表示值3.1。类似地,radiuscircle_area也是变量名。

2.4.2 对代码进行注释

另外,我们可以注意到前面的代码中有一行代码由#字符开始,这样的代码行称为注释。在Python中,注释由一个#符号开始,但是在其他语言中,注释可能由一个不同的特殊符号开始。当程序运行时,注释行并不会运行,它们在代码中的作用就是描述代码的重要信息。

定义:注释是Python程序中以#字符开始的一行。在程序运行时,注释行会被Python忽略。

注释应该帮助其他人和自己理解为什么要按那种方式编写代码。它们不应该仅描述代码实现了什么。“使用公式计算圆的面积”的注释比“把pi乘以radius再乘以radius”的注释要好得多。注意,前者解释了代码的正确用法,后者只是简单地描述了代码的具体操作。在这个例子中,阅读这行代码的人已经知道它是把这3个值相乘(因为他们知道怎样阅读代码!),但他们可能并不知道为什么要进行这种乘法。

当注释描述了一大段代码背后的基本原理时,它们就显得极为实用,特别是当我们设计出一种独特的方式来计算或实现某个功能的时候。注释应该描述特定代码块的实现背后的整体思路,因为它对其他人而言可能并不显而易见。当阅读代码的人理解了代码的整体思路之后,他就能通过阅读每行代码来观察它们所进行的具体计算,从而领悟代码的特殊之处了。

即学即测2.4 下面是一小段Python代码,该代码是下面这个问题的一个解决方案。在注释处填上适当的内容。“用两根水管向水池里灌水。绿管灌满水池需要1.5小时,蓝管灌满水池需要1.2小时。我们想要双管齐下加快灌水进度。绿管和蓝管一起灌水的话需要几分钟才能灌满水池?”

# 注释
time_green = 1.5
time_blue = 1.2
 
# 注释
minutes_green = 60 * time_green
minutes_blue = 60 * time_blue
 
# 注释
rate_hose_green = 1 / minutes_green
rate_hose_blue = 1 / minutes_blue
# 注释
rate_host_combined = rate_hose_green + rate_hose_blue
 
# 注释
time = 1/rate_host_combined