12.6 模块内建函数

系统还为模块提供了一些功能上的支持,现在我们将详细讨论他们。

12.6.1 import()

Python 1. 5加入了import()函数,它作为实际上导入模块的函数,这意味着import语句调用import()函数完成它的工作。提供这个函数是为了让有特殊需要的用户覆盖它,实现自定义的导入算法。

import()的语法是:

12.6 模块内建函数 - 图1

module_name变量是要导入模块的名称,globals是包含当前全局符号表的名字的字典,locals是包含局部符号表的名字的字典,fromlist是一个使用from-import语句所导入符号的列表。

globals、locals和fromlist参数都是可选的,默认分别为globals() 、locals()和[]。

调用import sys语句可以使用下边的语句完成:

12.6 模块内建函数 - 图2

12.6.2 globals()和locals()

globals()和locals()内建函数分别返回调用者全局和局部名称空间的字典。在一个函数内部,局部名称空间代表在函数执行时候定义的所有名字,locals()函数返回的就是包含这些名字的字典。globals()会返回函数可访问的全局名字。

在全局名称空间下,globals()和locals()返回相同的字典,因为这时的局部名称空间就是全局空间。下边这段代码演示这两个函数的了使用:

12.6 模块内建函数 - 图3

我们只在这里访问了字典的键,因为它的值在这里没有影响(而且他们会让行变得更长更难懂)。执行这个脚本,我们得到如下的输出:

12.6 模块内建函数 - 图4

12.6.3 reload()

reload()内建函数可以重新导入一个已经导入的模块。它的语法如下:

12.6 模块内建函数 - 图5

module是你想要重新导入的模块。使用reload()的时候有一些标准。首先模块必须是全部导入(不是使用from-import),而且它必须被成功导入。另外reload()函数的参数必须是模块自身而不是包含模块名的字符串。也就是说必须类似reload(sys)而不是reload(‘sys’)。

模块中的代码在导入时被执行,但只执行一次。以后执行import语句不会再次执行这些代码,只是绑定模块名称。而reload()函数不同。