12

所以我很困惑有什么区别......这是一些代码来显示我的困惑:

>>> 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,所以我不明白为什么第一次尝试找不到模块

笔记:

我只是以集合为例。我并不是在寻找具体为什么我的示例以它对集合的方式行事,而是在解释不同代码行在导入时实际要求的内容。如果您想对错误进行解释,请随意!谢谢!

4

2 回答 2

6

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

您应该阅读有关如何import工作的文档:here。它很长而且很复杂,但同时也相当直截了当,它研究了不同的包和模块以找到应该发挥作用的东西。具体来说,导入语句本身和导入系统

于 2013-10-29T20:59:06.307 回答
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不是子模块而是对象,因此只能以第二种方式“导入为”。

于 2013-10-29T20:57:56.370 回答