使用
import module as name并 不会 创建一个别名。您误解了导入系统。
导入有两件事:
- 将模块加载到内存中,并将结果存储在中
sys.modules
。此 *** 作仅执行 一次 ;后续导入将重用已经加载的模块对象。 - 在当前名称空间中绑定一个或多个名称。
该
as name语法使您可以在最后一步中控制名称。
对于
from module importname语法,您仍然需要命名完整模块,如中
module所查找
sys.modules。如果您真的想为此使用别名,则必须在此处添加额外的引用:
import numpy # loads sys.modules['numpy']import syssys.modules['np'] = numpy # creates another reference
但是
,在导入子模块时,这样做也会产生副作用。一般而言,您不想在
sys.modules不为所有(可能的)子模块创建别名的情况下通过拨入来为包创建别名,否则可能会导致Python将子模块重新导入为单独的命名空间。
在 这种情况下 ,导入
numpy还会触发的加载
numpy.linalg,因此您真正要做的就是:
import numpy as np# np.linalg now is available
不需要模块别名。对于不会自动导入子模块的软件包,您必须使用:
import package as aliasimport package.submodule
并
alias.submodule始终可用,因为子模块始终作为属性添加到父包中。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)