[英]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.