如何在Python中声明全局常量?

40 投票
5 回答
118015 浏览
提问于 2025-04-18 09:14

我有一些比较复杂的计算想在我的程序启动时进行,然后我想把结果(一个很大的不规则矩阵)保存在内存中,这样我就可以反复使用它。我的程序包含多个文件和类,我希望能够在任何地方访问这个变量,如果可以的话,还想把它定义为常量。

在Python中,怎么定义一个全局常量呢?

5 个回答

0

另一种方法是直接从你的常量文件中导入常量。

选项 1

globals.py

MY_CONSTANT = "Some constant value"

main.py

from globals import MY_CONSTANT

print(MY_CONSTANT)

选项 2

globals.py

MY_CONSTANT = "Some constant value"

main.py

import globals

print(globals.MY_CONSTANT)

所以你可以选择导入文件中的一堆常量(选项 2)或者只导入一个常量(我更喜欢选项 1)。

0

我不太明白你说的“全局常量”是什么意思;因为在Python里没有常量(没有“数据保护”,所有变量都是可以访问的)。

你可以实现一个单例模式,但你每次运行时都得重新生成这个单例。

另外一个选择是把结果存储在外部存储中(比如说,redis),这样所有进程都能访问。

根据你的数据集有多大,把它存储在像redis这样的快速键值数据库中可能会提高性能。

不过你还是得对数据进行转换和加载,因为redis并不知道什么是numpy数组(尽管它有很多复杂的数据类型可以利用)。

8

在Python中没有办法声明一个常量。你可以直接使用

SOME_CONSTANT = [...]

如果你声明常量的文件名是 file1.py,那么你可以通过以下方式在其他文件中访问它:

import file1

print file1.SOME_CONSTANT

假设这两个文件在同一个文件夹里。

37

我觉得被标记为好答案的内容并没有解决提问者的问题。在Python中,global这个关键词是用来在一个局部环境中修改全局变量的(这里有详细解释)。这意味着如果提问者在myfunc函数里修改SOME_CONSTANT,那么这个变化也会影响到函数外部(也就是全局范围内)。

myfunc的开头不使用global关键词,更接近于全局常量的意思,而不是建议的那种。尽管在Python中没有办法让一个值变成常量或不可变的。

49

你可以在模块的最外层声明一个变量,这样它就可以在这个模块里当作全局变量使用。而且你还可以把它导入到其他模块中。

#mymodule.py
GLOBAL_VAR = 'Magic String' #or matrix...

def myfunc():
    print(GLOBAL_VAR)

在其他模块中:

from mymodule import GLOBAL_VAR

撰写回答