从x import y和import x.y之间的差异

时间:2013-10-29 20:51:28

标签: python import

所以我很困惑,因为差异是......这里有一些代码可以显示我的困惑:

>>> import collections.OrderedDict as od
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named OrderedDict
>>> from collections import OrderedDict as od
>>> od
<class 'collections.OrderedDict'>

说明:

import collections.OrderedDict找不到该模块,但from collections import OrderedDict找到了它?! 这两个陈述之间有什么区别?

该类被读为collections.OrderedDict,所以我不明白为什么第一次尝试无法找到模块

注意:

我只是以collections为例。我并没有特别寻找为什么我的例子采用了它对集合的方式,而是为了解释为什么不同的代码行实际上要求进口。如果您想包含错误的解释,请随意!谢谢!

2 个答案:

答案 0 :(得分:4)

OrderedDictcollections模块中的一个类。当你看到像x.y这样的东西并且正在从中导入某些东西时,这意味着在这种情况下“y”实际上是一个模块。

您应该阅读有关import如何运作的文档:here。它很长并且涉及但同时相当直接地看待不同的包和模块以找到应该发挥作用的东西。具体而言,导入statement本身和import system

答案 1 :(得分:3)

PEP 221谈到import as

import foo.bar

用于导入模块bar子模块 foo。这可以“导入为”

import foo.bar as fb

导入对象

from foo import baz

这也可以“导入为”

from foo import baz as fb

collections.OrderedDict不是子模块,而是一个对象,因此它只能以第二种方式“导入为”。