[Python-ideas] re.compile_lazy - on first use compiled regexes

Richard Oudkerk shibturn at gmail.com
Thu Mar 28 15:34:52 CET 2013

An alternative would be to use a lazy proxy.  Given LazyProxy defined as 
below you can use

     pat = LazyProxy(re.compile, r"\w+")

instead of

     pat = re.compile(r"\w+")

This causes a minor slow down (~7%) if you use pat.search() in a loop.

     class LazyProxy(object):
         def __init__(self, func, *args):
             self.__func_args = (func, args)
         def __getattr__(self, name):
                 obj = object.__getattribute__(self, '__obj')
             except AttributeError:
                 func, args = self.__func_args
                 obj = self.__obj = func(*args)
             res = getattr(obj, name)
             setattr(self, name, res)
             return res


More information about the Python-ideas mailing list