diveintopython.org
Python for experienced programmers

2.2. 使用 from module import 导入模块

Python有两种导入模块的方法。两种都有用,你应该知道什么时候使用哪一种方法。一种方法, import module,你已经在第一章看过了。另一种方法完成同样的事情,但是它以细微但重要的不同方式工作。

例 2.4. 基本的 from module import 语法

from types import BuiltinFunctionType, BuiltinMethodType, \
    FunctionType, MethodType, ClassType

这种语法与你所知的 import module 语法类似,但是有一个重要的区别:导入模块 types 的属性和方法被直接导入到局部名字空间中,所以这些属性和方法是直接有效的,不需要通过模块名来限定。

例 2.5. import module 对比 from module import

>>> import types
>>> types.FunctionType             1
<type 'function'>
>>> FunctionType                   2
Traceback (innermost last):
  File "<interactive input>", line 1, in ?
NameError: There is no variable named 'FunctionType'
>>> from types import FunctionType 3
>>> FunctionType                   4
<type 'function'>
1

types 模块不包含方法,只有每个Python对象类型的属性。注意, FunctionType 属性必需用 types 模块名进行限定。

2 FunctionType 本身没有被定义在当前名字空间中;它只存在于 types 的上下文环境中。
3 这个语法直接从 types 模块中导入 FunctionType 属性到局部名字空间。
4 现在 FunctionType 可以直接存取,不需要引用 types

什么时候你应该使用 from module import

另外,它只是风格问题,你会看到用两种方式编写的Python代码。


进一步阅读