如何在不知道名字的情况下访问导入的对象?

时间:2014-12-18 18:55:12

标签: python object python-import

我试图使一些代码更具可扩展性。作为处理的一部分,我希望导入一些正则表达式模式对象。在生产过程中代码执行之前我不想知道有多少 - 我会为它们使用标准名称。

start_0 = re.compile(r"some start pattern")
start_1 = re.compile(r"some other start pattern")
stop_0 = re.compile(r"some stop pattern")
stop_1 = re.compile(r"some other stop pattern")
 .
 .
 .
stop_n = re.compile(r"(some nth stop pattern")

我想根据名称模式

使用所有正则表达式

到目前为止,我所做的只是保存了一个正则表达式列表,然后从IDLE shell导入它们。这很好,如果我使用dir功能,我可以看到它们,所以我可以通过名称调用它们,但我想用它们调用它们生成器进程

for regex in my_regex_list.py:
    do_something with the regex

是否可以在没有大量混乱的情况下获取名称?

2 个答案:

答案 0 :(得分:1)

我认为正确的答案是:你不应该。

任何模块都应该有一组可以导入的稳定名称。关键是如果您不知道要导入的名称,为什么要首先公开它?

但是,您可以创建一些可以导入的数据结构。

#mymodule.py
regex_list = [
    re.compile(r"some start pattern"),
    re.compile(r"some other start pattern"),
    ...
]

#main.py
from mymodule import regex_list
for regex in regex_list:
    ...

如果您想保留名称,则可以为其创建dict。如果您想保留名称和顺序,可以使用collections.OrderedDict

答案 1 :(得分:1)

不要将原始正则表达式放在单独的变量中,只需将它们放在一个列表中:

regex_list = [
    {start: r"some start pattern", end: r"some stop pattern"},
    {start: r"some other start pattern", end: r"some other end pattern"},
    ...
]

for regexes in regex_list:
    do someting with regexes.start and regexes.end