我的程序开始时我想做一些繁重的计算,然后我想将结果(一个大的凹凸矩阵)保存在内存中,以便我可以一次又一次地使用它。我的程序包含多个文件和类,我希望能够从任何地方访问此变量,并且如果可能的话,将其定义为常量。
如何在Python中定义全局常量?
答案 0 :(得分:20)
您可以在模块级别声明一个变量,并在模块中将其用作global
变量。您也可以将其导入其他模块。
#mymodule.py
GLOBAL_VAR = 'Magic String' #or matrix...
def myfunc():
global GLOBAL_VAR
#do something
或在其他模块中:
from mymodule import GLOBAL_VAR
答案 1 :(得分:18)
我不认为标记为好的答案可以解决操作问题。 Python中的global
关键字用于修改本地上下文中的全局变量(as explained here)。这意味着,如果在SOME_CONSTANT
内操作修改 myfunc
,则此更改也会影响外部功能范围(全局)。
在global
的开头不使用myfunc
关键字比建议的全局常量更接近。尽管没有办法在Python中使变量保持不变。
答案 2 :(得分:2)
无法在Python中声明常量。你可以使用
SOME_CONSTANT = [...]
如果声明它的文件名是file1.py
,那么您可以通过以下方式从其他文件访问它:
import file1
print file1.SOME_CONSTANT
假设两个文件都在同一目录中。
答案 3 :(得分:0)
我不确定你的意思是'全球常数&#39 ;;因为Python中没有常量(没有"数据保护"所有变量都可以访问)。
您可以实现singleton pattern,但每次都必须在运行时重新生成。
您的另一个选择是将结果存储在外部商店(例如,redis)中,可以从所有流程访问。
根据数据集的大小,将其外部存储在像redis这样的快速K / V中也可以提高性能。
你仍然需要转换并加载它,因为redis不知道numpy数组是什么(尽管它有many complex types你可以利用它。)