<分区>
当尝试从别名导入
时——这在scala
中很常见,我很惊讶地看到以下结果:
创建别名
import numpy as np
使用别名导入它包含的模块
from np import linalg
ImportError: No module named np.linalg
python 中是否有任何其他语法/等价物可用于导入模块?
<分区>
当尝试从别名导入
时——这在scala
中很常见,我很惊讶地看到以下结果:
创建别名
import numpy as np
使用别名导入它包含的模块
from np import linalg
ImportError: No module named np.linalg
python 中是否有任何其他语法/等价物可用于导入模块?
最佳答案
使用import module as name
不会创建别名。你误解了导入系统。
导入做两件事:
sys.modules
中。这只会一次;后续导入重新使用已加载的模块对象。as name
语法可让您在最后一步控制名称。
对于 from module import name
语法,您仍然需要命名完整的模块,因为 module
是在 sys.modules
中查找的.如果你真的想要一个别名,你必须在那里添加额外的引用:
import numpy # loads sys.modules['numpy']
import sys
sys.modules['np'] = numpy # creates another reference
但是,当您同时导入子模块时,这样做会产生副作用。一般来说,您不想通过在 sys.modules
中四处寻找来为包创建别名,而不想为所有(可能的)子模块创建别名,因为不这样做可以 cause Python to re-import submodules as separate namespaces .
在这种特定情况中,导入numpy
还会触发numpy.linalg
的加载,因此您真正需要做的是:
import numpy as np
# np.linalg now is available
不需要模块别名。对于不自动导入子模块的包,您必须使用:
import package as alias
import package.submodule
和 alias.submodule
无论如何都可用,因为子模块总是作为属性添加到父包中。
关于python - 使用别名导入模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42459939/
相关文章:
intellij-idea - 巴别塔别名。 WebStorm 无法识别子目录
Java Runtime.exec() 不支持 Linux 别名
ruby-on-rails - Ruby(Rails)将属性委托(delegate)给另一个模型的方法?
python - [Python EVE] : Reading the request parameters values in Python EVE
python - tornadoweb 的配置失败 nginx 设置,未知指令 "user"
python - 如何消除文本图像的倾斜并检索该图像的新边界框 Python OpenCV?
python - 如何将文本文件中的十六进制行转换为数组(Python)?