当使用包的别名时,为什么从包导入无效



为了让它更清楚,请考虑一个numpy示例:

import numpy as np
from numpy import array

这是意料之中的事。但是这个呢:

from np import array

输出为:

Traceback (most recent call last)
<ipython-input-21-d5c81fa93e5f> in <module>()
----> 1 from np import array
ModuleNotFoundError: No module named 'np'

一旦我将导入模块numpy的别名设置为np,难道我就不能仅使用np导入其他模块吗?

此外,两者的id()是相同的——numpynp都指相同的东西。

即使将模块导入为np,模块名称仍为numpy

import … as …语法的基本功能是:

np = internal_import_module('numpy')

因此,np只是用于引用numpy模块的本地名称。如果你看一下np的模块名称,你可以看到它仍然是'numpy':

>>> import numpy as np
>>> np.__name__
'numpy'

现在,在评估另一个导入语句时,根本不使用模块的本地名称。所以你的from numpy import array基本上就是这样的:

array = internal_import_module('numpy').array

这里array再次只是numpy模块内部的array成员的本地名称。然而,它不是np模块内部的成员,因为根本没有具有该名称的模块。

最新更新