使用别名导入模块

时间:2017-02-25 18:25:43

标签: python alias

尝试import来自别名 - 这在scala中很常见,我很惊讶地看到以下结果:

创建别名

  import numpy as np

使用别名导入其包含的模块

  from np import linalg

  ImportError: No module named np.linalg

python中是否有其他语法/等效项可用于导入模块?

2 个答案:

答案 0 :(得分:16)

使用locale 创建别名。你误解了导入系统。

导入有两件事:

  1. 将模块加载到内存中并将结果存储在import module as name中。这只做一次;后续导入重新使用已加载的模块对象。
  2. 在当前命名空间中绑定一个或多个名称。
  3. 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 也会触发加载numpy,因此您只需执行以下操作:

    numpy.linalg

    不需要模块别名。对于不自动导入子模块的软件包,您必须使用:

    import numpy as np
    # np.linalg now is available
    
    无论如何,

    import package as alias import package.submodule 可用,因为子模块总是作为父包的属性添加。

答案 1 :(得分:1)

我对你的例子的理解是,既然你已经导入了numpy,你就不能用别名导入它,因为它已经导入了linalg部分。