繁体   English   中英

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

[英]How can I access the objects that are imported without knowing their name?

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

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

是否可以在没有太多混乱的情况下获得名称?

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

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

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

#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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM