模块与包

模块是Python源代码文件,用于实现特定功能。模块化编程通过将代码划分为模块,提高代码复用性和维护性。导入模块时,Python会按照sys.path的搜索路径查找。模块导入有两种方式:`import 模块`和`from 模块 import 对象`。包是分层次的目录结构,每个目录下有_init_.py表示是包。模块打包发布通常通过编写setup.py脚本实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模块对应于python源代码文件;
多个功能相似的模块可以组织成一个包。

python中的模块包括系统模块、第三方模块和用户自定义模块。实质上是以.py为扩展名的python文件。
通过导入模块,可以使用该模块中的变量、函数和类等。

模块化程序设计的概念

如果程序中包含多个可以复用的函数或类,则通常把相关的函数和类分组包含在单独的模块中。这些提供计算功能的模块称之为模块(或函数模块),导入并使用这些模块的程序,则称之为客户端程序。把计算任务分离成不同模块的程序设计方法,称之为模块化编程。使用模块,可以将计算任务分解为大小合理的子任务,并实现代码的重用功能。
模块的API(Application Programming Interface)

客户端使用模块提供的函数时,无须了解其实现细节;
模块和客户端之间遵循的契约称之为API(应用程序接口);
API用于描述模块中提供的函数的功能和调用方法。

模块化程序设计的优越性

可以编写大规模的系统程序;
控制代码的复杂度;
实现代码重用;
增强可维护性;

模块的导入

模块导入方式(import)

方法
模块的导入方式一:import模块名 方式二:from模块名import函数名或 from模块名import*
导入示例import combinatorial;from combinatorial import fac,comb或者:from combinatorial import*
函数调用模块名.函数名;函数名
函数调用示例combinatorial.fac(10)或者fac(10)

模块导入(import)
使用import格式导入模块时,模块中的所有内容都会被导入到当前程序中,import的用法如下:

import 模块1,模块2,……

使用import可一次导入多个模块,每个模块名之间使用“,”分割。在命令行中导入某个模块,用户便可调用指定模块中的任意方法,调用模块中方法的方式如下:

模块.方法()

模块导入(from 模块名 import 方法/类/对象)
在这里插入图片描述
模块导入(from 模块名 import*)
在这里插入图片描述
创建模块
python模块对应于包含python代码的源文件(其扩展名为.py),在文件中可以定义变量、函数和类;还可以包含一般的语句,称之为主块(全局语句)。当运行该模块,或导入该模块时,主块语句将依次执行。

python 文件中的每个文件都可以做为一个模块存在,文件名即模块名。
在这里插入图片描述

模块的搜索路径

模块搜索路径即python搜索模块时的路径,这些路径存储于sys模块中的sys.path属性中,用户可先在解释器中导入sys模块,再查看sys.path的值,如下:在这里插入图片描述
sys.path的本质是列表,因此用户可通过列表的内置方法append动态地向sys.path中添加模块所在路径。假设将路径“sys.path.append(“C:\Users\Lenovo.ipython”)”添加到搜索路径中,其如下:
在这里插入图片描述

模块的导入顺序

导入模块时,解释器按下列目搜索路径和文件搜索顺序查找并导入文件。目录搜索路径为:
(1)当前目录。启动交互式python的目录,或python主程序位于的目录。
(2)操作系统环境变量PYTHONPATH中指定的目录。
(3)python标准库目录。

模块搜索路径sys.patn

sys模块的sys.path属性返回一个路径列表;
使用import语句导入模块时,系统自动从该列表的路径中搜索模块,如果没有找到,则程序报错。

模块的测试代码

(1)每个模块都有一个名称,通过特殊变量_name_可以获取模块的名称;
(2)特别的,当一个模块被用户单独运行时,其_name_的值为‘name’。故可以把模块源代码文件的测试代码写在相应的测试判断中,以保证只有单独运行时,才会运行测试代码。

直接运行模块代码_name_取值“_main”;
导入模块时,_name_取值为模块名称。

模块的导入特性:
模块在被导入时,会被执行一次,这个过程叫做加载。一个模块即便被多次导入程序,也只会被加载。
模块的缓存:
在这里插入图片描述
按字节编译的.pyc文件

(1).pyc文件是经过编译后的字节,这样下次导入时,如果模块源代码.py文件没有修改(通过比较两者的时间截),则直接.pyc文件,从而提高程序效率;
按字节编译的.pyc文件是在导入模块时,python解释器自动完成,无需程序员手动编译。

包及模块的打包发布

包是python引入的分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的python的应用环境。引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。
每一个python的包目录下面都会有名为_init_.py的特殊文件,该文件可以为空文件,但是必须存在,它表明这个目录不是普通的目录结构,而是一个包,里面包含模块。
在这里插入图片描述

模块的打包发布

用户可将自己编写的模块打包为可安装的压缩包,分享给其它开发人员。
将待发布的包放在与setup.py文件同级的目录中,在这里插入图片描述
编辑setup.py脚本文件,setup.py文件中包含内容如下:
在这里插入图片描述
在当前路径下打开命令行窗口,使用包含一个名为lib的目录,该目录中存储了待发布模块的备份。build文件夹中的目录结构如下所示:
在这里插入图片描述
用户可通过sdist命令建立存放文件:
在这里插入图片描述
在这里插入图片描述
注:本文根据嵩天老师《python语言程序设计基础》做的笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值