lazy properties?

Ian Kelly ian.g.kelly at gmail.com
Thu Nov 1 22:52:17 CET 2012


On Thu, Nov 1, 2012 at 3:38 PM, Andrea Crotti <andrea.crotti.0 at gmail.com> wrote:
> What I would like to write is
>     @lazy_property
>     def var_lazy(self):
>         return long_computation()
>
> and this should imply that the long_computation is called only once..

If you're using Python 3.2+, then functools.lru_cache probably
suffices for your needs.

@property
@functools.lru_cache()
def var_lazy(self):
    return long_computation()

If you really need to shorten that to a single declaration:

def lazy_property(func):
    return property(functools.lru_cache()(func))


More information about the Python-list mailing list