1 创建模块:定义模块用文本编辑器,以py为后缀保存。文件命名需遵循python命名规则。
2 模块使用:import / from
import:将整个模块对象赋值给一个变量名
from:将一个或者多个变量名赋值给另外一个模块中同名的对象,或者说深拷贝。
from module import name1,name2
<==>
import module
name1 = module.name1
name2 = module.name2
del module
两个模块有同名属性时,必须用import模块
M.py
def func():
.......
N.py
def func():
.......
import M,N
M.func()
N.func()
3 属性名的点号运算:层级对象访问控制符
4 重载模块:reload
函数会使已加载的模块代码重新载入并重新执行,模块中新的代码赋值语句会在适当的地方修改现有的模块对象。reload 是
Python 中的内置函数,不是语句,参数reload的是已经存在的模块对象,而不是变量名。
5 模块包
除模块名以外,导入也可以指定目录路径,python代码的目录就称为包,此类导入称为包导入。
导入包 import dir1.dir2.mod
from dir1.dir2.mod import x
__init__.py包文件
包导入语句的路径内每个目录都必须有__init__.py这个文件,否则会导致包导入失败。负责包初始化,包首次读取时,会自动执行。
6 高级模块话题
a 在模块中隐藏数据,最小化from*的破坏。_x
指不被赋值的变量名x,__all__=[a,b,c]指要复制出的变量名。
b 混合用法模式:__name__ 和 __main__
如果程序以顶层程序文件执行,启动时,__name__会被设置为字符串__main__
如果文件被导入,__name__就会改设成客户端所了解的模块名
可做单元测试
c 修改模块搜索路径
import sys
sys.path
sys.path.append('dir')
d import as 扩展 import module as name 等价于
import module
name = module
del module
e 相对导入语法
from 语句可以使用.作为相对路径来用。
位于模块A.B.C
from .
import D #import A.B.D
from ..F
import G # import A.F.G
from .. import
E #import A.E
f 模块设计理念:总在python模块内编写代码,模块耦合降低,最大化模块粘合性,模块应避免修改其他模块变量。
g 通过变量名字符串导入模块
modname = "string"
exec "import"+modname
h reload
不影响from导入,from还是使用最初的变量对象。reload没有传递性,如果reload一个模块,模块中导入另外的模块,另外的模块不会被reload。