我从我的文件constants.py
导入一些常量,如下所示:
from constants import (SOME_CONST, OTHER_CONST, ANOTHER_ONE)
这个常量是文件名,我从中读取数据,我想要实现的是:
for filename in [SOME_CONST, OTHER_CONST, ANOTHER_ONE]:
# process file
constants.py
SOME_CONST = "filename.txt"
OTHER_CONST = "myfile.xml"
ANOTHER_ONE = "file.csv"
但我想知道是否有办法避免在for中声明列表,比如遍历或构建导入常量列表,因为可能有许多常量不仅仅是3例如示例而且容易出错,因为我需要导入常量并将其添加到列表中,我只想导入它并使用导入的任何内容。
答案 0 :(得分:5)
您无法列出所有导入的常量',no。它们只是当前模块中的更多全局变量。
您的选择是:
列出constants
模块上的所有名称:
import constants
for name in dir(constants):
const = getattr(constants, name)
如果这些名称遵循某种模式,您可以对其进行过滤:
for name in dir(constants):
if name.startswith('FOO_'):
过滤器可以很简单,检查名称是全部大写。
将列表声明为常量模块的一部分,然后导入 。
在当前模块中声明一个名称列表,并使用它来导入'你的常数:
import constants
const_names = ['SOME_CONST', 'OTHER_CONST', 'ANOTHER_ONE']
for const_name in const_names:
const = getattr(constants, const_name)
答案 1 :(得分:2)
如果你尊重以大写字母命名全局变量的python约定(只有它们),你可以按照Davidmh的建议做:
for filename in [i for i in dir(constants) where i.upper() == i]:
...