考虑以下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
内,则可以,但是我想避免两次导入相同的模块。如何在其他模块之间共享导入的模块?
答案 0 :(得分:2)
在python中,导入主要是关于名称空间的。导入模块会将其放入当前的名称空间,如果尚未在内存中,则会将其加载到内存中。
如果导入的模块已经导入了另一个模块,则该模块已经在内存中,因此您只需获得对现有模块的引用即可。
因此,换句话说,只需在需要使用它的每个文件中做一个import numpy as np
。这不会消耗任何额外的内存,因为numpy
仅会被正确加载一次,以后每次加载import语句只会将其添加到调用它的人的命名空间中。
这样做的另一个好处是,您的代码将使用numpy更加清楚-如果您只是在程序中途使用np.load()
并且没有迹象表明已定义了它,那将会造成混乱np
在任何地方(例如,C就有这个问题;自从以来,几乎每种编程语言都使用名称空间来避免这种情况,甚至包括C ++)。在python中,不不这样做是不明智的。