在 python 中的其他模块之间共享一个模块
Share a module across other modules in python
考虑以下 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)
此代码returns出现以下错误:
global name 'np' is not defined
如果我在 optimization.py
中导入 numpy
,它可以工作,但我想避免两次导入相同的模块。如何在其他模块之间共享导入的模块?
在python中,导入主要是关于命名空间的。导入模块会将其放入当前命名空间,如果它不在内存中,则将其加载到内存中。
如果您导入另一个模块已经导入的模块,那么该模块已经在内存中,因此您只需获取对现有模块的引用。
所以,换句话说,只需在每个需要使用它的文件中执行 import numpy as np
。这不会消耗任何额外的内存,因为 numpy
只会正确加载一次,并且每个后续的 import 语句都会将它添加到调用它的人的命名空间中。
这样做的另一个好处是,您的代码将使用 numpy 更加清晰 - 如果您只是在程序中途使用 np.load()
并且没有任何迹象表明您' d 在任何地方都定义了 np
(例如,C 有这个问题;从那以后几乎所有编程语言都使用名称空间的想法来避免它,甚至包括 C++)。 python 不 这样做是不好的做法。
考虑以下 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)
此代码returns出现以下错误:
global name 'np' is not defined
如果我在 optimization.py
中导入 numpy
,它可以工作,但我想避免两次导入相同的模块。如何在其他模块之间共享导入的模块?
在python中,导入主要是关于命名空间的。导入模块会将其放入当前命名空间,如果它不在内存中,则将其加载到内存中。
如果您导入另一个模块已经导入的模块,那么该模块已经在内存中,因此您只需获取对现有模块的引用。
所以,换句话说,只需在每个需要使用它的文件中执行 import numpy as np
。这不会消耗任何额外的内存,因为 numpy
只会正确加载一次,并且每个后续的 import 语句都会将它添加到调用它的人的命名空间中。
这样做的另一个好处是,您的代码将使用 numpy 更加清晰 - 如果您只是在程序中途使用 np.load()
并且没有任何迹象表明您' d 在任何地方都定义了 np
(例如,C 有这个问题;从那以后几乎所有编程语言都使用名称空间的想法来避免它,甚至包括 C++)。 python 不 这样做是不好的做法。