1. 模块和文件
模块(module)是指那些自我包含并且有组织的代码片段,是组织python代码的一种方法。
包(package)是一个有层次的目录文件结构,它定义了一个由模块和子包组成的python应用程序执行环境。内含__init__文件。
文件是物理层上组织模块的方法。,一个文件是一个独立的模块。模块文件名:模块名+扩展名如 mymodule.py
1.1 模块名称空间
一个名称空间就是一个从名称到对象的关系映射集合。每个模块都定义了它自己的唯一的名称空间,在各模块内可定义各自的函数,不同模块内函数名称可同可不同。通过句点标识法访问模块函数而不用担心名称冲突的发生,如module1.atoi()和module2.atoi()并不冲突。
2.2 搜索路径和路径搜索
路径搜索是查找某个文件的操作;搜索路径是查找一组目录。
导入模块时失败,如果模块名无误则可能是该模块不在默认搜索路径中。
>>>import sys #导入sys模块
>>>sys.path #查看搜索路径列表
>>>sys.path.append(dir) #dir是指导入模块文件所在的目录,也可用insert()方法
>>>sys.modules #字典形式,用于查看当前导入了哪些模块及来自哪里。
2.名称空间
名称空间是名称(标识符)到对象的映射。向名称空间添加名称是绑定标识符到指定对象的操作及给该对象的引用计数+1;改变一个名字的绑定叫重新绑定;删除一个名字叫解除绑定。
局部名称空间,全局名称空间,内建名称空间
python允许通过句点属性标识添加名称空间。如mymodule.version等
2.1 名称空间与变量作用域
名称空间指名字和对象间的映射关系;而作用域还指出从用户代码的哪些物理位置可以访问到这些名字。(注:名称空间只是对应关系如给一个类添加一个属性,如果仅仅一个属性在类之外显然该属性并非类的属性,如果定义在类里面才是。作用域主要是作用,如如函数中有一个x=1,那么x只在函数起作用。)
2.2 名称查找、确定作用域、覆盖
解释器查找名称:局部名称空间-->全局名称空间-->内建名称空间-->NameError
3.导入模块
3.1 import (as)语句
一般多行导入,可读性好:
import module1
import module2
一行导入多模块:
import module1[,module2]
一般所有的模块在python模块的开头部分导入,顺序:
python标准库模块
空行
python第三方模块
空行
应用程序自定义模块
注意,如果在一个模块的顶层导入,则它的作用域是全局的,如果在函数中导入,它的作用域是局部的。
3.2 from-import (as)语句导入指定模块属性
例:from TKinter import (TK,Frame,Button,END)
4.模块内建函数
__import__(name, globals=None, locals=None, fromlist=(), level=0) -> module
例:math=__import__('math')其中变量名不一定是math
或f = __import__('math',['path'])
内建:globals()和locals()分别返回调用者全局和局部名称空间的字典