模块化程序设计理念
- 模块和包概念的进化
“量变引起质变”、“物以类聚”是进化发展的核心哲学思想;
(1).Python程序由模块组成。一个模块对应python源文件,一般后缀名是:.py。
(2).模块由语句组成。运行Python程序时,按照模块中语句的顺序依次执行。
(3).语句是Python程序的构造单元,用于创建对象、变量赋值、调用函数、控制语句等。
模块化编程由如下几个重要优势:
(1).便于将一个任务分解成多个模块,实现团队协同开发,完成大规模程序。
(2).实现代码复用。一个模块实现后,可以被反复调用。
(3).可维护性增强。
- 模块化编程的流程:
(1).设计API,进行功能描述;
(2).编码实现API中描述的功能;
(3).在模块中编写测试代码,并消除全局代码;
(4).使用私有函数实现不被外部客户调用的模块函数。
- 模块的导入
import语句导入:
import语句的基本语法格式:
import 模块名
import 模块1,模块2…
import 模块名 as 模块别名
import本质上是使用了内置函数__import__(). 通过import导入一个模块时,python解释器进行执行,最终会生成一个对象,这个对象就代表可被加载的模块。
from…import导入
Python中可以使用from…import导入模块中的成员。语法格式如下:
from 模块名 import 成员1,成员2,…
如果希望导入一个模块中所有的成员,则可以采用如下结构:
from 模块名 import *
import()动态导入
import语句本质上就是调用内置函数__import__(),可以通过其实现动态导入。给__import__()动态传递不同的参数值,就能导入不同的模块。
模块的加载问题
当导入一个模块时,模块中的代码都会被执行。不过,如果再次导入这个模块,则不会再次执行。
一个模块无论导入多少次,这个模块在整个解释器进程内有且仅有一个实例对象。
- 包(package)的概念和结构
当一个项目有很多模块时,需要在进行组织。将功能类似的模块放到一起,形成类“包”。本质上,“包”就是一个必须有__init__.py文件的文件夹。
包下面可以包含“模块”,也可以在包含“子包”。
在pycharm中可以通过:New–>Python package创建。
init.py的三个核心作用:
1.作为包的标识,不能删除;
2.用来实现模糊导入;
3.导入包实质是执行__init__.py文件,可以在__init__.py文件中做包的初始化、以及需要统一执行的代码、批量导入。
包内引用:
如果是子包内的引用,可以按照相对应位置引入子模块,以aa包下module_AA中导入a包下列内容为例:
sys.path和模块搜索路径
导入模块时,Python解释器按照如下路径寻找模块文件:
(1).内置模块;(2).当前目录;(3).程序的主目录;(4).pythonpath目录(如果已经设置了pythonpath环境变量);(5).标准链接库目录;(6).第三方库目录(site-packages目录);(7). .pth文件的内容(如果存在的话);(8).sys.path.append()临时添加的目录。