5.2. 使用 from module import 导入模块

Python 有两种导入模块的方式。两者都很有用,您应该知道何时使用哪一种。一种方式是 import module,您已经在2.4 节 “一切都是对象” 中见过。另一种方式实现了相同的功能,但有一些细微而重要的区别。

以下是基本的 from module import 语法


from UserDict import UserDict

这类似于您熟悉且喜爱的 import module 语法,但有一个重要的区别:导入模块 types 的属性和方法会直接导入到本地命名空间中,因此可以直接使用它们,而无需使用模块名称进行限定。您可以导入单个项目,也可以使用 from module import * 导入所有内容。

Note
Python 中的 from module import * 类似于 Perl 中的 use modulePython 中的 import module 类似于 Perl 中的 require module
Note
Python 中的 from module import * 类似于 Java 中的 import module.*Python 中的 import module 类似于 Java 中的 import module

示例 5.2. 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 此语法将属性 FunctionTypetypes 模块直接导入到本地命名空间中。
4 现在可以直接访问 FunctionType,而无需引用 types

什么时候应该使用 from module import

除此之外,这只是一个风格问题,您会看到 Python 代码以两种方式编写。

Caution
请谨慎使用 from module import *,因为它会使确定特定函数或属性的来源变得困难,从而使调试和重构更加困难。

有关模块导入技术的进一步阅读