使用包的别名时,为什么从包导入无效?
问题内容:
为了更加清楚,请考虑一个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()
这两个是一样的-既numpy
和np
指同样的事情。
问题答案:
numpy
即使将模块导入为,模块名称仍然是np
。
什么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
再次这里只是模块array
内部成员的本地名称numpy
。但是,它不是np
模块内部的成员,因为根本就没有该名称的模块。