【发布时间】:2013-07-01 21:48:29
【问题描述】:
我发现自己经常写这样的代码:
_munge_text_re = re.compile("... complicated regex ...")
def munge_text(text):
match = _munge_text_re.match(text)
... do stuff with match ...
只有munge_text 使用_munge_text_re,所以最好以某种方式使其成为函数的本地函数,但如果我将re.compile 行移动到def 内,那么每次函数执行时都会对其进行评估调用,违背了编译正则表达式的目的。
有没有办法让_munge_text_re 本地化到munge_text,同时仍然只评估其初始化程序一次?单次评估不必在模块加载时发生;第一次调用munge_text 就足够了。
这个例子使用了一个正则表达式,我需要它的大部分时间是一个正则表达式,但它可能是任何实例化昂贵的数据(所以你不想每次调用函数时都这样做) 并在程序的生命周期内固定。 ConfigParser 实例也会浮现在脑海中。
额外的功劳:由于太乏味而无法进入这里,我当前的项目需要极高的向后兼容性,因此适用于 Python 2.0 的解决方案会比不适用的解决方案要好。 p>
【问题讨论】:
标签: python