遍历导入常量的Pythonic方法
我正在从文件遍历导入常量的Pythonic方法,python,Python,我正在从文件constants.py中导入一些常量,如下所示: from constants import (SOME_CONST, OTHER_CONST, ANOTHER_ONE) 这些常量是文件名,我从中读取数据,我想要实现的是: for filename in [SOME_CONST, OTHER_CONST, ANOTHER_ONE]: # process file 常数.py SOME_CONST = "filename.txt" OTHER_CONST = "myfil
constants.py
中导入一些常量,如下所示:
from constants import (SOME_CONST, OTHER_CONST, ANOTHER_ONE)
这些常量是文件名,我从中读取数据,我想要实现的是:
for filename in [SOME_CONST, OTHER_CONST, ANOTHER_ONE]:
# process file
常数.py
SOME_CONST = "filename.txt"
OTHER_CONST = "myfile.xml"
ANOTHER_ONE = "file.csv"
但我想知道是否有办法避免在for中声明列表,比如遍历或构建导入常量的列表,因为可以有很多常量,而不是像示例中那样只有3个,而且很容易出错,因为我需要导入常量并将其添加到列表中,我只想导入它并处理导入的任何内容。如果您遵守python约定,即使用大写字母命名全局变量(并且只使用它们),那么您可以按照Davidmm的建议:
for filename in [i for i in dir(constants) where i.upper() == i]:
...
不能列出“所有导入的常量”。它们只是当前模块中的多个全局常量 你的选择是:
常量
模块上的所有名称:
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)
没有“导入常量”这样的东西;他们都是全球性的。您是从
常量导入所有名称,还是它们有特定的模式?导入常量;目录(常量)
可能会对您有所帮助。它将列出该模块中的所有内容。@MartijnPieters没有模式,我更新了我的问题。@Davidmh这很有用,遗憾的是,该文件包含许多此模块中未使用的其他常量。您可以指定一个筛选器,因此,您只需设置一次。选项3可能是在尊重DRY的同时选择常量子集的最简单方法。在我的常量名称中添加前缀PRE
,并对其进行筛选似乎是正确的选项。@如果您的所有常量都是大写,而模块中的其他任何常量都不是大写,如果name.upper()==name:
,则可以按进行筛选。这样你就不需要添加前缀了。