点击上方蓝字▲即可关注我们
Python程序结构可以用下面四句话概括性地描述:(1)程序由模块构成。(2)模块由语句构成。(3)语句包括表达式。(4)表达式创建并处理对象。根据百度百科,计算机程序是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。在Python中,每一个Python程序文件都是一个模块。模块是最高级别的程序组织单元。模块具有独立的命名空间,它将数据和程序逻辑封装起来以便重用。一个Python模块可以通过导入操作加载另一个模块,之后就可以使用在被导入模块中定义的变量名。语句是程序段(一个代码块)的组成单位。一条语句可以是一个表达式或某个带有Python关键字的结构,例如if语句、while语句和for语句。表达式指的是可以求出某个值的语法单元,如字面值、名称、属性访问和函数调用等等,它们最终都会返回一个值。但是,并非所有语言构件都是表达式,还存在不能被用作表达式的语言构造,例如if语句、def语句和class语句等等。再如,我们熟知的赋值是语句而非表达式。
下面先来看一个很简单的Python程序,这个程序仅只包含一个Python文件。示例一文件名:calculatormain.py"""几何图形面积计算器"""# 模块导入import math# 全局变量定义PI = round(math.pi, 2)# 函数定义def areaOfSquare(length):"计算并返回边长为length的正方形的面积"area = length ** 2 # 边长的平方return area# 函数定义def areaOfRectangle(length, width):"计算并返回长为length,宽为width的长方形的面积"area = length * width # 长 * 宽return area# 函数定义def areaOfCicle(radius):"计算并返回半径为radius的圆的面积"area = PI * radius ** 2 # π * 半径的平方return area# 主程序if __name__ == '__main__':print(areaOfSquare(2))print(areaOfRectangle(3, 4))print(areaOfCicle(10))示例程序仅包含一个文件名为calculatormain.py的Python文件(模块)。这个Python模块由六个语句构成,分别是:
(1)模块导入部分的一个import语句。(2)全局变量定义部分的一个赋值语句。(3)函数定义部分的三个def语句。(4)主程序部分的一个if语句。其中的def语句和if语句均是复合语句。在三个的def语句中,均包含一个赋值语句和一个return语句。而主程序部分的if语句则包含三个print()函数调用语句。再来看下示例中的表达式。全局变量PI赋值语句中等号右边的round()函数调用、以及round()函数调用中的两个实参均为表达式。三个计算几何图形面积的函数内的length ** 2、length * width和PI * radius ** 2也都是表达式。三个print()函数的实参——三个自定义函数调用也是表达式。这些表达式作为语句的一部分,计算这些表达式都会获得一个值。
在本例中,程序仅包含一个Python模块,但是,单独一个Python文件构成一个Python程序在实际上比较少见。下面我们来看下如何重构下程序结构,使得程序结构更合理,也从而可以更容易地实现新功能。
示例二一般地,我们会把程序分解成若干个模块,每个模块实现特定的功能。在编码实现模块时,我们应该最大化模块的内聚性,从而可以有效控制模块之间的耦合。并且,一个设计良好的、高内聚的模块被复用的可能性更高。通常来说,如果一个模块被复用得越多,那么这个模块的质量越稳定。本着高内聚的模块设计原则,我们把计算几何图形面积相关代码从calculatormain.py文件中抽离出来,形成一个文件名为areacalculator.py的独立的Python模块。然后在calculatormain.py文件中,通过import语句导入areacalculator模块,之后就可以在这个模块文件中使用这个名为areacalculator的模块对象变量了。在主程序部分,通过areacalculator.areaOfSquare(2)这种表示法修改三个函数的调用形式。代码如下所示:
文件名:areacalculator.py"""几何图形面积计算器"""# 模块导入import math# 全局变量定义PI = round(math.pi, 2)# 函数定义def areaOfSquare(length):"计算并返回边长为length的正方形的面积"area = length ** 2 # 边长的平方return area# 函数定义def areaOfRectangle(length, width):"计算并返回长为length,宽为width的长方形的面积"area = length * width # 长 * 宽return area# 函数定义def areaOfCicle(radius):"计算并返回半径为radius的圆的面积"area = PI * radius ** 2 # π * 半径的平方return area
文件名:calculatormain.py# 模块导入import areacalculator# 主程序if __name__ == '__main__':print(areacalculator.areaOfSquare(2))print(areacalculator.areaOfRectangle(3, 4))print(areacalculator.areaOfCicle(10))
随着时间的推移,我们对需求理解得更为透彻,对程序实现也有了极大的掌控。在这个过程中,程序结构也一直在演变中,但是高内聚和松耦合这两个模块设计原则是始终是我们必须恪守的行动准则。
结束语
本文对Python程序结构,以及与之相关的模块设计原则做了简单的介绍。
计算机编程是一门手艺。只有多多编程实践,才能更好地理解和掌握计算机编程这项手艺。让我们一起努力吧!
—— END ——