在python中的其他模块之间共享一个模块

时间:2019-07-29 15:18:08

标签: python python-import

考虑以下python代码设置:

main.py
MTS/
    optimization.py
    __init__.py

__init__.py由一行import optimization组成 和optimization.py使用不同的模块,例如numpy(称为 np )。让main.py为:

from MTS import optimization
import numpy as np
a=np.load('data.npy')
b=optimization.minimize(a)

此代码返回以下错误:

  

未定义全局名称'np'

如果我将numpy导入optimization.py内,则可以,但是我想避免两次导入相同的模块。如何在其他模块之间共享导入的模块?

1 个答案:

答案 0 :(得分:2)

在python中,导入主要是关于名称空间的。导入模块会将其放入当前的名称空间,如果尚未在内存中,则会将其加载到内存中。

如果导入的模块已经导入了另一个模块,则该模块已经在内存中,因此您只需获得对现有模块的引用即可。

因此,换句话说,只需在需要使用它的每个文件中做一个import numpy as np。这不会消耗任何额外的内存,因为numpy仅会被正确加载一次,以后每次加载import语句只会将其添加到调用它的人的命名空间中。

这样做的另一个好处是,您的代码将使用numpy更加清楚-如果您只是在程序中途使用np.load()并且没有迹象表明已定义了它,那将会造成混乱np在任何地方(例如,C就有这个问题;自从以来,几乎每种编程语言都使用名称空间来避免这种情况,甚至包括C ++)。在python中,不这样做是不明智的。