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

Rya*_*axe 9 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'>
Run Code Online (Sandbox Code Playgroud)

说明:

import collections.OrderedDict没找到模块,却from collections import OrderedDict发现了吗?!这两个陈述有什么区别?

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

注意:

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

whe*_*ies 6

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

您应该阅读有关import工作原理的文档:此处。它既漫长又费时,但是与此同时,它在如何看待不同的包和模块以找到应发挥的作用方面也相当简单。具体来说,导入语句本身和导入系统


小智 5

PEP 221谈论import as.

import foo.bar
Run Code Online (Sandbox Code Playgroud)

用于导入模块的子模块 。这可以“导入为”barfoo

import foo.bar as fb
Run Code Online (Sandbox Code Playgroud)

导入一个对象

from foo import baz
Run Code Online (Sandbox Code Playgroud)

这也可以“导入为”

from foo import baz as fb
Run Code Online (Sandbox Code Playgroud)

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