Python 包管理
1. 模块
一个模块就是一个包含 python 代码的文件,后缀名称是.py 就可以,模块就是个 python 文件
为什么我们用模块
程序太大,编写维护非常不方便,需要拆分
模块可以增加代码重复利用的方法
当作命名空间使用,避免命名冲突
如何定义模块
模块就是一个普通文件,所以任何代码可以直接书写
不过根据模块的规范,最好在本块中编写以下内容
函数(单一功能)
类(相似功能的组合,或者类似业务模块)
测试代码
如何使用模块
模块直接导入
模块名称直接以数字开头,需要借助 importlib 帮助
语法
import module_namemodule_name.function_namemodule_name.class_name
案例 01.py,02.py,p01.py,p02.py
if __name__ == ``__main__
的使用可以有效的避免模块代码被导入的时候被动执行的问题
建议所有程序的入口都以此代码为入口
2. 模块的搜索路径和存储
什么是模块的搜索路径
加载模块的时候,系统会在哪些地方寻找此模块
系统默认的模块搜索路径
添加搜索路径
模块的加载顺序
搜索内存中已经加载好的模块
搜索 python 的内置模块
搜索 sys.path 路径
包
包是一种组织管理代码的方式,包里面存放的是模块
用于将模块包含在一起的文件夹就是包
自定义包的结构
包的导入操作
import package_name
直接导入一个包,可以使用__init__.py 中的内容
使用方式是:
此种方式的访问内容是
案例 pkg01, p07.py
from ... import 导入
from package import module1, module2, module3, ... ...
此种导入方法不执行
__init__
的内容from package import *
导入当前包
__init__.py
文件中所有的函数和类使用方法
案例 p09.py, 注意此种导入的具体内容
from package.module import *
导入包中指定的模块的所有内容
使用方法
在开发环境中经常会引用其他模块,可以在当前包中直接导入其他模块中的内容
import 完整的包或者模块的路径
__all__
的用法在使用 from package import * 的时候,* 可以导入的内容
__init__.py
中如果文件为空,或者没有__all__
, 那么只可以把__init__
中的内容导入__init__
如果设置了__all__
的值,那么则按照__all__
指定的子包或者模块进行加载如此则不会载入__init__
中的内容__all__=['module1', 'module2', 'package1'... ...]
案例 pkg02,p10.py
命名空间
用于区分不同位置不同功能但相同名称的函数或者变量的一个特定前缀
作用是防止命名冲突
版权声明: 本文为 InfoQ 作者【若尘】的原创文章。
原文链接:【http://xie.infoq.cn/article/74391641dd3fda14a056a6738】。文章转载请联系作者。
评论