> On Apr 26, 2020, at 7:03 AM, Tom Forbes <t...@tomforb.es> wrote: > > I would like to suggest adding a simple “once” method to functools. As the > name suggests, this would be a decorator that would call the decorated > function, cache the result and return it with subsequent calls.
It seems like you would get just about everything you want with one line: once = lru_cache(maxsize=None) which would be used like this: @once def welcome(): len('hello') > Using lru_cache like this works but it’s not as efficient as it could be - in > every case you’re adding lru_cache overhead despite not requiring it. You're likely imagining more overhead than there actually is. Used as shown above, the lru_cache() is astonishingly small and efficient. Access time is slightly cheaper than writing d[()] where d={(): some_constant}. The infinite_lru_cache_wrapper() just makes a single dict lookup and returns the value.¹ The lru_cache_make_key() function just increments the empty args tuple and returns it.² And because it is a C object, calling it will be faster than for a Python function that just returns a constant, "lambda: some_constant()". This is very, very fast. Raymond ¹ https://github.com/python/cpython/blob/master/Modules/_functoolsmodule.c#L870 ² https://github.com/python/cpython/blob/master/Modules/_functoolsmodule.c#L809 _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/VCWTMH6Z6ADAH5YKRQ6CU4ZIHLLBN4KQ/ Code of Conduct: http://python.org/psf/codeofconduct/