On Tue, 1 Aug 2017 at 12:53 Thomas Nyberg <tomuxi...@gmx.com> wrote: > On 08/01/2017 01:06 PM, Matt Wheeler wrote: > > A function which is moderately expensive to run, that will always return > > the same result if run again in the same process, and which will not be > > needed in every session. > > > > What about just using a lazy getter property? E.g.: > > https://pypi.python.org/pypi/lazy-property
That doesn't necessarily solve any problems (Tom has already answered why this won't work for Django, but also...) - the methods then can't be passed around before being called, which will make your lazy evaluation greedy again if that's why you're using the lru_cache. - this requires the functions to be methods of an instance of some class (no, you can't use properties on a class, see below). That may be much more overhead than the current solution (the object+class lookups plus @property method call might add up to more overhead to a single object lookup & lru_cache call as a rule anyway. I haven't investigated): Python 3.6.0 (default, Mar 13 2017, 00:53:03) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> class A: ... @property ... @classmethod ... def test(cls): ... return 'a' ... >>> A.test <property object at 0x1094afa98> -- -- Matt Wheeler http://funkyh.at -- https://mail.python.org/mailman/listinfo/python-list