本篇主要介绍Python模块和如何将模块导入编程环境中,模块是用来组织代码的方法。
模块(module)
模块支持从逻辑上组织Python代码。当程序员编写的代码量变得相当大的时候,就可以把代码分成一些有组织的代码段,彼此之间可以交互。可以是一个包含数据成员和方法的类,也可以是一组相关但彼此独立的操作函数。这些代码之间是共享的。把其他模块中属性附加到你的模块中的操作叫做导入(import),那些自我包含且有组织的代码片段称为模块(module)。
命名空间(namespace)
命名空间(namespace)就是一个从名称到对象的关系映射集合。
在程序执行期间有三个活动的命名空间,分别为局部命名空间(local namespace)、全局命名空间(global namespace)、内建名称空间(build-in namespace)。
我们可以使用globals()和locals()内建函数判断一个名字属于哪一个命名空间。
globals()和locals()内建函数分别返回调用者全局和局部命名空间的字典。
命名空间与变量作用域
变量作用域除了指出名字与对象间的映射关系,还指出了从用户代码的哪些物理位置可以访问到这些名字。
在程序的执行过程中,局部命名空间和作用域会随着函数调用而变化。
名称的查找
当函数、变量等信息发生重名时,Python会按照"local namespace -> global namespace -> build-in namespace"的顺序进行搜索用户所需元素,并且以第一个找到此元素的namespace为准。
路径搜索
在模块的导入时,需要一个“路径搜索”的过程,即在文件系统“预定义区域”中查找要导入的模块,如果没有找到,将会返回错误ImportError。
搜索路径是指待查找的一组目录地址。
路径搜索是指查找某个文件的操作。
导入模块
-
使用import语句导入模块。
import module # 单个模块导入 import module1, module2.... # 多个模块导入
-
使用from-import语句导入模块。
from module import name
-
拓展import语句(as)
from module import name as yourname 可以通过这种方法来替换模块中的某个对象的名称
注意: import语句导入模块的方法是加载这一模块中的全部对象到你的程序中,而from-import语句简单地导入你所要使用的具体的对象,比较节省内存。
导入顺序
建议按照以下顺序进行导入相关模块。
- Python标准库模块
- Python第三方模块
- 应用程序自定义模块
关于__future__
由于改进、新特性和当前特性增强,某些变化会影响到当前功能,为了让Python程序员为新事物做好准备,Python实现了future指令。
可以使用from-import语句导入新特性。
from __future__ import new_feature
reload()
reload()内建函数可以重新导入一个已经导入的模块。
reload(module)
这个方法是模块的全部导入以及模块必须成功导入。函数的参数是模块名称。