12–5. 使用 __import__().
(a) 使用 __import__ 把一个模块导入到你的名称空间。 你最后使用了什么样的语法?
(b) 和上边相同, 使用 __import__() 从指定模块导入特定的名字。
module = __import__('sys', fromlist=['path'])
path = module.path
print(module.modules['sys'])
print(path)
12–6. 扩展导入。
创建一个 importAs() 函数. 这个函数可以把一个模块导入到你的名称空间, 但使用你指定的名字, 而不是原始名字。 例如, 调用 newname=importAs('mymodule') 会导入mymodule , 但模块和它的所有元素都通过新名称 newname 或 newname.attr 访问。 这是 Python2.0 引入的扩展导入实现的功能。
def importAs(module):
return __import__(module)
if __name__ == '__main__':
sys = importAs('sys')
print(sys.path)
12–7. 导入钩子。
研究 PEP 302 的导入钩子机制. 实现你自己的导入机制, 允许编码你的模块(encryption, bzip2, rot13, 等), 这样解释器会自动解码它们并正确导入。你可以参看 zip文件导入的实现 (参阅 第 12.5.7 节)。