模块化编程

模块和包的概念

下图可以便于理解

Python程序由模块(module)组成。一个模块对应Python源文件,一般后缀名是:.py。

模块由语句组成。运行Python程序时,按照模块中语句的顺序依次执行。

语句是Python程序的构造单元,用于创建对象、变量赋值、调用函数、控制语句等。

标准库模块(standard library)

与函数类似,模块也分为标准库模块和用户自定义模块。

Python标准库提供了操作系统功能、网络通信、文本处理、文件处理、数学运算等基本的功能。比如:random(随机数)、math(数学运算)、time(时间处理)、file(文件处理)、os(和操作系统交互)、sys(和解释器交互)等。

另外,Python还提供了海量的第三方模块,使用方式和标准库类似。功能覆盖了我们能想象到的所有领域,比如:科学计算、WEB开发、大数据、人工智能、图形系统等。

模块化编程

模块化编程(Modular Programming)将一个任务分解成多个模块,这样每个模块可以反复使用。模块化编程具有以下优势:

  1. 便于将一个任务分解成多个模块,实现团队协同开发,完成大规模程序。
  2. 实现代码复用。一个模块实现后,可以被反复调用。
  3. 可维护性强。

模块化编程的流程

  1. 设计 API ,进行功能描述。
  2. 编码实现 API 描述的功能。
  3. 在模块中编写测试代码,并消除全局变量。
  4. 使用私有函数实现不被外部客户端调用的模块函数。

模块的 API(Application Programming Interface 应用程序编程接口)是用于描述模块中提供的函数和类的功能描述和使用方式描述。模块化编程中,首先设计的就是模块的 API(即要实现功能的描述),然后开始编码实现 API 中描述的功能。最后,在其他模块中导入本模块进行调用。

可以通过help(模块名)查看模块的 API 。一般使用时先导入模块,然后通过 help 函数查看。

示例代码如下

复制代码
import datetime
help(datetime)

代码运行结果

也可以在Python的api文档中查询。首先进入 Python 的安装目录下(根据自己电脑的安装位置,我的在C:\Users\86198\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Python 3.12)

双击打开即可看到

接下来给出示例:设计计算学生成绩的API

示例代码如下

复制代码
#encoding=utf-8 #设置编码格式
"""
本模块用于计算学生成绩
"""
name = 'student_name'

def sum_grade(num1,num2,num3):
    """根据传入的语文、数学、英语成绩计算总成绩"""
    pass

def avg_grade(sum_grade):
    """根据传入的总成绩计算总分"""
    pass

首先进行功能描述,搭建写代码的"框架",接下来实现编码(模块的创建和测试代码)。

每个模块都有一个名称,通过特殊变量 name 可以获得模块名称。在正常情况下,模块名字对应源文件名。仅有一个例外,就是当一个模块被作为程序入口时(主程序、交互提示符下),它的__name__的值为__main__。可以利用这个特点,将模块源代码文件中的测试代码进行独立的处理。

示例代码如下

复制代码
#encoding=utf-8 #设置编码格式
"""
本模块用于计算学生成绩
"""
name = 'student_name'

def sum_grade(num1,num2,num3):
    """根据传入的语文、数学、英语成绩计算总成绩"""
    sum_grade = num1+num2+num3
    return sum_grade

def avg_grade(sum_grade):
    """根据传入的总成绩计算总分"""
    return sum_grade/3
# 测试代码
if __name__ =="__main__":
    print(sum_grade(90,80,70))
    print(avg_grade())

模块文档字符串和API设计

可以在模块的第一行增加一个文档字符串,用于描述模块的相关功能。然后,通过__doc__可以获得文档字符串的内容。

示例代码如下

复制代码
import student_grade

'''获得模块文档字符串的内容'''
# 使用__doc__获得模块的文档字符串的内容
print(student_grade.__doc__)
# 使用__doc__获得模块中的sum_grade属性的文档字符串的内容
print(student_grade.sum_grade.__doc__)
# 使用__doc__获得模块中的avg_grade属性的文档字符串的内容
print(student_grade.avg_grade.__doc__)

print()
#获得模块名称
print(student_grade.name)
相关推荐
Zzj_tju3 分钟前
Alignment Science 与可控生成:偏好学习、宪法式训练和可验证对齐
人工智能·学习·语言模型
m沐沐8 分钟前
【机器学习】基于 dlib 面部关键点的多表情分类
人工智能·python·深度学习·机器学习·计算机视觉·人脸识别·表情识别
CHANG_THE_WORLD10 分钟前
逐层拆解:C++ 虚函数从对象内存到手工调用的完整过程
java·开发语言·c++
Scott9999HH12 分钟前
2026 避坑实录:国产品牌压力变送器什么牌子好?从硬件抗扰到 C++ Qt 实时曲线绘制源码剖析
开发语言·c++·qt
geats人山人海27 分钟前
c# 第八章 多态与案例
开发语言·c#
️学习的小王31 分钟前
Python + MySQL 学生信息管理系统实战教程
android·python·mysql
lbb 小魔仙34 分钟前
从零搭建Python开发环境:Python安装 + VSCode + PyCharm 完整配置指南
vscode·python·pycharm
ch_atu36 分钟前
使用python下载modelscope上的模型
开发语言·python
spssau1 小时前
一文学会结构方程模型:从模型搭建、路径图绘制到不达标调整,实操全流程
人工智能·python·算法
Albart5751 小时前
Python爬虫请求头伪装后仍被反爬,基于代理池+随机延迟的绕过实战
开发语言·爬虫·python