模块唯一的特殊操作是属性访问: m.name
,这里 m 为一个模块而 name 访问定义在 m 的符号表中的一个名称。
模块属性可以被赋值。 (请注意 import 语句严格来说也是对模块对象的一种操作;import foo
不要求存在一个名为 foo 的模块对象,而是要求存在一个对于名为 foo 的模块的 (永久性) 定义。)
每个模块都有一个特殊属性 __dict__。 这是包含模块的符号表的字典。 修改此字典将实际改变模块的符号表,但是无法直接对 __dict__ 赋值 (你可以写 m.__dict__['a'] = 1
,这会将 m.a
定义为 1
,但是你不能写 m.__dict__ = {}
)。 不建议直接修改 __dict__。
内置于解释器中的模块会写成这样: <module 'sys' (built-in)>
。 如果是从一个文件加载,则会写成 <module 'os' from '/usr/local/lib/pythonX.Y/os.pyc'>
。
模块的导入
# 导入名为modulename的模块
# 调用函数时为modulename.funtionname
import modulename
# 从名为modulename的模块导入funtionname的功能函数
# 调用函数时为funtionname
from modulename import funtionname
# 从名为modulename的模块导入funtionname1、funtionname2、funtionname...的多个功能函数
# 调用函数时为funtionname
from modulename import funtionname1, funtionname2, funtionname...
# 从名为modulename的模块导入所有功能函数
# 调用函数时为funtionname
from modulename import *
# 导入名为modulename的模块,并命令为name别名
# 调用函数时为name.funtionname
import modulename as name
# 加载Lib/importlib/util.py
import import importlib.util