我有以下python文件constants.py
,它存储了一堆常量:
ONE = 1
TWO = 2
ANOTHER = "Test"
....
我正在尝试导入所有变量,并将它们添加到名为data
的列表中。到目前为止,这就是我所拥有的,但是如果我向constants.py
添加一个常数,那么我需要记住将其添加到data
列表中:
from constants import *
data = [ONE, TWO, ANOTHER, ...]
这里有更好的方法吗?
答案 0 :(得分:1)
解决方案是在constants.py
文件中创建列表。如下所示:
ONE = 1
TWO = 2
ANOTHER = "Test"
....
data = [ONE, TWO, ANOTHER, ...]
然后,您只需将列表导入到主文件中即可。
答案 1 :(得分:1)
一种方法是使用importlib
模块。如果您的constants.py
模块包含:
ONE = 1
TWO = 2
ANOTHER = "Test"
__all__ = [ "ONE", "TWO", "THREE", "ANOTHER" ]
您可以将它们作为模块导入:
>>> import importlib
>>> constants = importlib.import_module('constants')
>>> constants.ONE
1
>>> constants.__dict__
{ ... 'ONE': 1, 'TWO': 2, 'THREE': 3, 'ANOTHER': 'Test'}
由于“笨拙”属性(__spec__
,__builtins__
等)的膨胀,包含__all__
属性可能很有用。
>>> constants_dict = { k: constants.__dict__[k] for k in constants.__all__ }
>>> constants_dict
{'ONE': 1, 'TWO': 2, 'THREE': 3, 'ANOTHER': 'Test'}
答案 2 :(得分:1)
如果变量以大写字母开头,则可以这样做
ONE = 1
TWO = 2
ANOTHER = "Test"
exec('data = [' + ','.join([e for e in dir() if e[0].isupper()]) + ']')
,您不必记住将它们添加到data
。
答案 3 :(得分:1)
有点类似于其他响应,但是不需要其他模块。
data = {name:getattr(constants, name) for name in dir(constants) if name[0] != '_'}
print(data) #Prints {'ANOTHER': 'Test', 'ONE': 1, 'TWO': 2}
请注意,此处的导入语句应为import constants
,而不是from constants import *
。