遍历导入常量的Pythonic方法

我从我的文件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例如示例而且容易出错,因为我会需要导入常量并将其添加到列表中,我只想导入它并使用导入的任何内容.

最佳答案 你不能列出’所有导入的常量’,没有.它们只是当前模块中的更多全局变量.

您的选择是:

>列出常量模块上的所有名称:

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)
点赞