将长列表常量导入到Python文件中

130 投票
12 回答
221903 浏览
提问于 2025-04-16 19:32

在Python中,有没有类似于C语言中的预处理器语句,比如:

#define MY_CONSTANT 50

另外,我有一大堆常量想要导入到几个类里。有没有办法像上面那样在一个.py文件中声明这些常量,然后再导入到另一个.py文件中呢?

编辑。

文件Constants.py的内容是:

#!/usr/bin/env python
# encoding: utf-8
"""
Constants.py
"""

MY_CONSTANT_ONE = 50
MY_CONSTANT_TWO = 51

myExample.py的内容是:

#!/usr/bin/env python
# encoding: utf-8
"""
myExample.py
"""

import sys
import os

import Constants

class myExample:
    def __init__(self):
        self.someValueOne = Constants.MY_CONSTANT_ONE + 1
        self.someValueTwo = Constants.MY_CONSTANT_TWO + 1

if __name__ == '__main__':
    x = MyClass()

编辑。

从编译器得到的错误信息是,

NameError: "全局名称 'MY_CONSTANT_ONE' 未定义"

在myExample的init函数中,第13行 self.someValueOne = Constants.MY_CONSTANT_ONE + 1 复制 输出 程序以代码#1退出 用时0.06秒。

12 个回答

17

当然你可以这样做:

# a.py
MY_CONSTANT = ...

# b.py
from a import *
print MY_CONSTANT
25

Python没有预处理器,也没有真正意义上的常量,换句话说,你可以随时改变几乎所有东西(虽然你可以模拟常量的特性,但为了保持常量的特性而这样做的情况很少,并且通常不被认为有用)。当我们定义一个常量时,通常会用全大写字母和下划线来命名,然后就算完成了——“我们都是成年人”,没有理智的人会去改变一个常量。当然,除非他有很好的理由,并且确切知道自己在做什么,这种情况下你也不能(而且可能不应该)阻止他。

当然,你可以定义一个模块级别的名称并给它一个值,然后在另一个模块中使用它。这并不是常量特有的功能,想了解更多可以看看模块系统的相关内容。

# a.py
MY_CONSTANT = ...

# b.py
import a
print a.MY_CONSTANT
190

Python 不是预处理的语言。你可以直接创建一个文件,叫做 myconstants.py

MY_CONSTANT = 50

然后导入这些内容就可以正常使用了:

import myconstants
print myconstants.MY_CONSTANT * 2

撰写回答