将长列表常量导入到Python文件中
在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