12.10 练习

12-1.路径搜索和搜索路径。路径搜索和搜索路径之间有什么不同?

12-2.导入属性。假设你的模块mymodule里有一个foo()函数。

(a)把这个函数导入到你的名称空间有哪两种方法?

(b)这两种方法导入后的名称空间有什么不同?

12-3.导入“import module”和“fromn module import*”有什么不同?

12-4.名称空间和变量作用域。名称空间和变量作用域有什么不同?

12-5.使用import()。

(a)使用import把一个模块导入到你的名称空间。你最后使用了什么样的语法?

(b)和上边相同,使用import()从指定模块导入特定的名字。

12-6.扩展导入。创建一个importAs()函数。这个函数可以把一个模块导入到你的名称空间,但使用你指定的名字,而不是原始名字。例如,调用newname=importAs(‘mymodule’)会导入mymodule,但模块和它的所有元素都通过新名称newname或newname.attr访问。这是Python 2. 0引入的扩展导入实现的功能。

12-7.导入钩子。研究PEP 302的导入钩子机制。实现你自己的导入机制,允许编码你的模块(encryption、bzip2、rot13等),这样解释器会自动解码它们并正确导入。你可以参看zip文件导入的实现(参阅第12.5.7节)。