程序越来越复杂——同一个功能的语句封装到函数中——函数诞生
函数和变量多了——同一类型对象的数据和行为统一管理、调用——“类”诞生
函数和类多了——类似功能的函数和类统统放到一个模块中——模块诞生
python程序由模块组成,一个模块对应一个.py文件
标准库模块标准库提供了系统操作、网络通信、文本处理、文件处理、数学运算等基本功能
如random math time file os sys 等
另外还提供海量第三方模块
模块化编程就是将一个任务分解成多个模块,每个模块像积木一样便于后期反复使用
模块化编程的流程1.设计API,进行功能描述
2.编码实现功能
3.在模块中编写测试代码,并消除全局代码
4.使用私有函数不被外部调用
模块的导入 import 语句导入基本语法:
import 模块名 #导入一个模块
import 模块1,模块2 #导入多个模块
import 模块名 as 模块别名 #导入模块并使用新名字
加载的模块分四个通用类别
a. 使用python编写的文件
b.已编译为共享库或DLL的C或C++扩展
c.包好一组模块的包
d.使用C编写并链接到python解释器的内置模块
from...import 导入python中可以使用from...import导入模块中的成员。基本语法格式如下:
from 模块名 import 成员1,成员2,...
如果希望导入一个模块中的所有成员,则可以采用如下方式:
from 模块名 import **
区别import导入的是模块,from...import 导入的是模块中的一个函数/类
类比:import 导入的是文件,若要使用该文件下的内容必须加文件名称
from ... import 导入的是文件下的内容,直接使用这些内容即可,前面无需加文件名称
_import__()动态导入import()语句的本质就是调用内置函数import__(),我们可以通过它实现动态导入,给import__()动态传递不同的参数值,就能导入不同的模块
s="math" m=__import__(s) #导入后生成的模块对象的引用给变量m print(m.pi) m.sin(3)
注意,一般不建议自行使用上述模块,如需实现动态导入可以使用importlib模块
import importlib a=importlib.import_module(s) a.pi a.sin(3)
无论导入多少次,解释器进程都只会有一个实例对象
若需重新加载可用importlib.reload(模块名)
包(package)的使用当一个项目中有很多模块时,有必要进行再次组织,将类似功能的模块放到一起,形成了包,本质上,包就是一个必须有_init__.py 的文件
创建:New——Python Package
import 包名.文件名
from 包名 import 文件名
导入包的本质其实是导入了包的init__.py文件,这样,可以在init.py中批量导入
用*导入包import *是希望文件系统找出包中所有的子模块,然后导入他们(time consuming)
包内引用如果是子包内的引用,可以按相对位置引入子模块
from .. import module_A #..表示上级目录 .表示同级目录 from . import module_A2 #.表示同级目录sys.path和搜索路径
到我们导入模块时,python去哪里找这个文件呢?
一般按如下路径寻找
import sys
print(sys.path) #查看当前查找路径
sys.path.append("d:") #临时增加目录
.pth文件的写法
#一行一个目录 g:a g:b g:c
需确保g:a ,g:b ,g:c对应的目录真实存在
在Windows系统中建立.pth文件,由于没有文件名不能直接建立,需要输入“.pth."
模块的发布和安装 本地发布setup.py 输入
制作发布文件
本地安装模块cmd界面 python setup.py install
上传模块到PyPI1.注册PyPI
2.创建用户信息文件.pypirc
方式1: 使用命令(适用linux)
输入并执行后 python setup.py register ,然后输入用户名和密码
方式2:使用文件
在用户的家目录(windows: c:/user/用户名)里创建一个文件名为.pypirc,内容为:
[distutils] index-servers=pypi [pypi] repository=http://upload.pypi.org/legacy/ username= 账户名 password= 你自己的密码pip安装
pip install package-name 安装模块



