我发现自己经常写这样的代码:
_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 中运行的解决方案会比不适用的解决方案要好。