《Python核心编程》第十二章练习解析

第一题:

路径搜索和搜索路径。路径搜索和搜索路径之间有什么不同?

解答:前者是指查找某个文件的操作,后者是去查找一组目录。

第二题:

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

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

import mymodule
from mymodule import foo

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

解答:第一种将mymodule里的属性全部导入,第二种只导入foo

第三题:

导入“import module”和“from module import*”有什么不同?

解答:调用from-import可以把名字导入当前的名称空间里去,这意味着你不需要使用属性/句点属性标识来访问模块的标识符。

第四题:

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

解答:名称空间是纯粹意义上的名字和对象间的映射关系,而作用域还指出了从用户代码的哪些物理位置可以访问到这些名字。

第五题:

使用__import__()。

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

sys = __import__('sys')

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

__import__('os',globals(),locals(),['path','pip'])  #等价于from os import path, pip

第六题:

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

def importAS(mymodule):
    new = __import__(mymodule)
    return new

第七题:

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*