- 模块:指自我包含并且有组织的代码片段, 一个文件被看作是一个独立模块
- 路径搜索: 在文件系统‘预定义区域’(就是搜索路径)中查找
<modulename>.py
文件 - 默认搜索路径两种方法:
a)
PYTHONPATH
环境变量 b)sys.path
(由每个独立路径组成的list) 可进行修改 - 查看当前导入的模块和源
sys.modules
, 它返回的是一个字典, 模块名为键, 物理地址为值 - 命名空间:名称(标识符)到对象的映射集合 向名称空间添加名称的操作过程涉及绑定标识符到指定对象的操作(以及给该对象的引用计数+1)
- 改变一个名字的绑定叫做重新绑定, 删除一个名字叫做解除绑定
- 执行期间有两或三个活动的名称空间:局部名称空间(不断变化)、全局名称空间、内建名称空间
解释器加载顺序:内建、全局、局部 内建名称空间:由__builtins__
模块中的名字构成 全局名称空间:在模块开始执行后变为活动名称空间 __builtin__
模块:内建函数、异常及其他属性, 正常情况下__builtins__
包含__builtin__
的所有名字- 无限制的命名空间: 你可以在任何需要放置数据的地方获得一个命名空间(如用句点属性标识符给函数添加属性)
- 模块导入风格: 按顺序为标准库, 第三方模块, 应用程序自定义模块
- 导入模块的作用域取决于导入位置(顶外侧:全局, 函数内:局部)
- 模块导入特性:
- 载入时会执行, 所以尽可能把模块定义和函数放在模块的顶层,第一次导入模块会执行模块最高级的代码(即没有缩进的)
- 无论导入多少次, 一个模块只被加载一次
- 可以把名字导入到当前的名称空间中(导入特定名字时)
- 从模块导入名字后名字只会是局部名称空间的一部分(局部绑定), 解决:import整个模块并给出完整的标识符名称
- 可以对包含python模块的zip格式文件进行导入
- 新特性:允许把一个已经安装的模块作为脚本执行
- 要限制使用
import *
(可能会”污染”当前名称空间), 用标准分组机制:import (x ,y ,z)
- 用
as
(2.6正式为关键字)在导入的同时指定局部绑定名称:import abcdefghhhhh as ahh
- 新特性模块:
__future__
(直接import
不行, 必须指定新特性名) -
警告框架组成: API(通过调用
warning
模块),警告异常类的集合(Warning
继承自Exception
), 警告过滤器(也可以启动python时使用-W
), 警告默认输出到sys.stderr
- 模块内建函数:实现导入模块的函数
__import__('<modulename>')
全局/局部名称空间的字典:globals()/locals()
(局部:函数执行时定义的所有名字) (全局:函数可访问的全局名字) 重新导入一个已经导入的模块:reload(module)
调用reload()
时注意:- 必须是成功并全部导入
- 参数是模块自身而不是模块的字符串
- 包:一个有层次的文件目录结构, 定义了一个由模块和子包组成的Python应用程序执行环境, 也使用句点属性标识符来访问
python2.7亲测:如果包中没有
__init__.py
, 在导入时不会被找到 __init__.py
:初始化模块,from-import
在导入子包时会用到(可以是空文件), 如果没有, 将会导致一个ImportWarning
信息 其中的__all__
变量包含执行import *
语句时应该导入的模块的名字- 绝对导入(通过python路径访问)/相对导入(句点开头)
- 阻止属性导入:在不想导入的属性名前加一个
_
(下划线),但如果全部导入或者显式地导入带_
的, 就会无效 - 在一些新系统(Unix区分, win不区分)上使不区分大小写的进行导入工作:需要指定环境变量
PYTHONCASEOK
- 导入常用辅助模块:
提供底层功能
imp
, 查找用modulefinder
, 打包用pkgutil
(*.pkg
文件), 指定路径site
温故知新,高级复读机