Python的模块与包

模块

在Python中,模块是最高级别的程序组织单元,它将程序代码和数据封装起来以便再利用,同时提供自包含的命名空间从而避免程序出现变量名冲突。
模块处理

语句或函数作用
import使用户程序(导入者)以一个整体获取一个模块
from允许用户程序从一个模块文件中获取特定的名称
imp.reload提供了一种在不终止Pyhthon程序的情况下重新载入模块文件代码的方法

模块搜索路径

1.程序的主目录
2.PYTHONPATH目录(如果设置了的话)
3.标准库目录
4.任何.pth文件中的内容(如果存在的话)
5.第三方扩展应用的site-packages主目录

以上五个·组件组合起来就变成了sys.path

模块搜索路径sys.path

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

模块搜索路径示例

>>>import sys
>>>sys.path

临时增加模块搜索路径示例

>>>import sys
>>>sys.path.append('c:\\pythonpa\works')

模块代码编写基础

模块的创建

使用文本编辑器把一些Python代码输入至文本文件中,然后以“.py”为后缀名进行保存,这样创建出的任何文件都被自动认为是Python的模块。
Python 文件中的每个 都可以做为一模块存在, 文件名即模块名。

import os
os.getcwd()  #查看当前路径
os.chdir('F:\\my_modules')  #修改当前路径
import sys
sys.path  #查看搜索路径

模块文件名

模块怎么命名都可以,但如果打算将其导入,模块文件名就应该以.py结尾。因为模块名在Python程序中会变成变量名,所以遵循一般变量名的命名规则。

模块的使用

1.import语句
2.from语句
3.from*语句

import和from是可执行的语句,而不是编译时的声明。被导入的模块和名称,只有在它们所对应的import或from语句执行后,才可以使用。

导入方式
方法方法示例调用调用示例
import 模块名import combinatorial模块名.函数名combinatorial.fac(10)
from模块名import函数名from combinatorial import fac,comb函数名fac(10)
from模块名import*from combinatorial import *函数名fac(10)

使用from…import…语句可简化方法的调用方式,但若导入文件中存在与导入内容重名的方法、变量或类时,程序执行将会出错。因此,相对而言,使用import语句导入模块更为安全。

模块的属性

_ _ all _ _属性

##my_module.py
__all__ = []   #__all__变量控制模块里哪些功能可以使用*号导入
def special_add(a,b):
	return a+b+100
	pipi=9.999

在这里插入图片描述在这里插入图片描述

>>>import my_module import *
>>>special_add(3,5)
108

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

_ _ name _ _属性

在这里插入图片描述

模块的测试代码

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

>>>import my_module
下面测试该模块的功能是否正常:
测试1:测试本模块的特殊加法是否在原有结果上增加100:
整数35的和在本模块中的结果为:108
测试2:测试常数pipi是否等于9.999:
本模块中变量pipi的值为:9.999

__name__ = __main__  
#直接运行模块代码,__name__取值为“__main__”

__name__ = my_module
#导入模块时,__name__取值为模块名称

在这里插入图片描述在这里插入图片描述在这里插入图片描述

模块的导入特性

模块在被导入时,会被执行一次
这个过程也叫做加载。一个模块即使被多次导入程序,也只会被加载一次。
在这里插入图片描述在这里插入图片描述

模块的缓存

在这里插入图片描述在这里插入图片描述

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

包与模块的打包发布

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

在这里插入图片描述在这里插入图片描述

模块的打包发布

用户可将自己编写的模块打包为可安装的压缩包,分享给其他人。
将待发布的包放在与setup.py文件同级的目录中,目录结构如下所示:
在这里插入图片描述编辑setup.py脚本文件,setup.py文件中包含的内容如下:
在这里插入图片描述其中的setupカ一个函数,包含5个参数,依次カ:包名、版本号、描述信息、作者以及包中含有的模抉,实际上setup函数中不只有这些参数,但这些参数也不是必需的,用户可有选择地迸行设置。
在当前路径下打开命令行窗口,使用bulid命令构建模块,示例如下:

python setup.py build

经此操作后,当前目录中会创建一个名为build的文件夹, 其中包含一个名为lib的目录, 该目录中存储了待发布模块的备份。build文件夹中的目录结构如下所示:
在这里插入图片描述
用户可通过sdist命令建立存放文件,示例如下:在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值