模块是一个包含Python定义和语句的文件。文件名为模块名加上.py后缀
在模块内,模块名可由__name__变量引用。
使用import module name来导入模块,这样就可使用模块内的所有函数了
函数调用使用 module.function 方式
每个模块都有其私有的符号表,在该模块中可被所有函数作为全局符号表使用
导入的其他方式: from modulename import funcname1,funcname2
而这种方式一般是不被推荐的,因为有屏蔽已定义函数的风险
每个模块只导入解释器会话一次,若模块改变,需要重启解释器,或者使用modulename.reload()
如果以python modulename.py <args>运行模块 __name__会设置为__main__
因此可在结尾使用以下代码
if __name__ == "__main__":
import sys
fib(int(sys.argv[1]))
这样处理后,模块文件就像脚本一样,可执行了
模块搜索路径:
1.输入脚本所在路径
2.PYTHONPATH环境变量对应的路径
注意脚本名不能与标准模块名重名
python 文件的编译:
1.-O 目前只移除assert语句,生成.pyo文件
2.-OO 目前只移除__doc__字符串
3..pyc或.pyo只是载入较快,而不是运行较快
4.当在命令行执行脚本时,不会生成.pyc或.pyo文件
5.可以有 .pyc而没有.py
6.compileall可创建.pyc文件 使用 –O生成 .pyo
dir()函数用来发现模块中包含有哪些函数,没有参数时,返回当前定义的名字
import sys
sys.ps1 主提示符
sys.ps2 副提示符
import builtins
dir(builtins)
包:用来封装模块,__init__.py用来让python把目录作为包含包
当使用from package import item,item可以是包中的子模块,或包中定义的其他名字,如函数,类,或变量。import语句先测试包中是否含有该item,若没有,就把它当做为是模块名,然后载入,如果无法找到,将会抛出ImportError异常
当使用import item.subitem.subsubitem,除了最后一个item每个item都必须是个包;最后一个item必须是模块或包,不能使类,函数或变量
from package import * 这会导入__all__变量对应的模块,否则不导入任何子模块,导入__init__中的所有名字,及之前显示用import导入的子模块
注意from Package import specific_submodule是推荐的方法
包内索引,可以使用from module import name,也可使用.,..,注意main模块必须使用绝对导入
from . import echo
from .. import formats
from ..filters import equalizer
__path__属性用来初始化包含多个包的目录名的列表