所以我很困惑,因为差异是......这里有一些代码可以显示我的困惑:
>>> 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为例。我并没有特别寻找为什么我的例子采用了它对集合的方式,而是为了解释为什么不同的代码行实际上要求进口。如果您想包含错误的解释,请随意!谢谢!
答案 0 :(得分:4)
OrderedDict
是collections
模块中的一个类。当你看到像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
不是子模块,而是一个对象,因此它只能以第二种方式“导入为”。