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