nemoize
Simple Python Memoizer decorator for classes, functions, and methods.
Installation
nemoize is available on PyPi
python3 -m pip install nemoize
Or you can install manually via the built distribution (wheel)/source dist from PyPi or github.
How to Use
Import
from nemoize import memoize
Then use the @memoize decorator on various entities as seen below
Using on a Class
@memoize
class Test:
def __init__(self, value):
self._value = value
@property
def value(self):
return self._value
Using on a function
@memoize
def test_func():
return "hoot"
Using on an instance method
class Owl:
def __init__(self):
self.food = 1337
pass
@memoize(max_size)
def eat(self, num):
self.food -= num
Configuration
There are also various configuration parameters to memoize():
@memoize(max_size=13): Max number of entries to keep in the cache:@memoize(cache_exceptions=True): Also cache exceptions, so any raised Exceptions will be the exact same Exception instance:@memoize(max_size=13, cache_exceptions=True): Together@memoize(arg_hash_function=str): Changes the hash function on arg and each keyword-arg to use the str() function, which can make lists "hashable"
Testing
The unit tests in test/unit/test_memoize.py run through various use cases of using the @memoize annotation on classes, functions, and instance methods.
Benchmarking
There is a benchmarking utility under benchmark/ that is used for benchmarking nemoize performance against other options and non-memoized scenarios.
Example numbers:
Benchmark test for Memoized vs Non-memoized classes with [1000] computations in their__init__() methods for [1000000] iterations
Non-memoized class creation + empty method call average time (ms): 0.01550699806213379
Memoized class creation + empty method call average time (ms): 0.0012589995861053468
Benchmark test for @memoize, non-memoized, a @simplified_memoize, and @functools.lru_cache comparison usingfunction calculating fibonacci sum for [100] fib numbers, for [10000000] iterations
@simplified_memoize fib average time (ms): 0.0001555999994277954
@memoize fib average time (ms): 4.4699978828430175e-05
@memoize(cache_exceptions=True) (to avoid delegation to functools.lru_cache) fib average time (ms): 0.00034309999942779544
@functools.lru_cache fib average time (ms): 4.440000057220459e-05
Metadata
Release files for nemoize 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| nemoize-0.1.0.tar.gz | 5.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| nemoize-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 11.0 kB
Release files / nemoize-0.1.0.tar.gz
| Download URL | nemoize-0.1.0.tar.gz |
|---|---|
| Size | 5.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4f3a6380e34d84f2bc96819ddec84d82fe13c81d91605323676e2207e6f25a4b
|
|
BLAKE2b-256 checksum How to use checksums |
7fa15a16d6bdca8d6ce894c95d121add51c4fa2c87450793811fda9b9b51a644
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.0 CPython/3.9.12
|
Release files / nemoize-0.1.0-py3-none-any.whl
| Download URL | nemoize-0.1.0-py3-none-any.whl |
|---|---|
| Size | 5.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3aa1a02a456120f9bbad39a8859bfc1877a9bc0c271cb3def526ab84b78cf5cf
|
|
BLAKE2b-256 checksum How to use checksums |
52a27b2c7e4483bc4f9971c005de0a2742555c1e3a7955c648b3e604499f3fff
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.0 CPython/3.9.12
|