Decorator utility to memoize a class, function, or method
Project description
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nemoize-0.1.0.tar.gz.
File metadata
- Download URL: nemoize-0.1.0.tar.gz
- Upload date:
- Size: 5.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.0 CPython/3.9.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4f3a6380e34d84f2bc96819ddec84d82fe13c81d91605323676e2207e6f25a4b
|
|
| MD5 |
3c32200ddd4702478080c9d1b408e161
|
|
| BLAKE2b-256 |
7fa15a16d6bdca8d6ce894c95d121add51c4fa2c87450793811fda9b9b51a644
|
File details
Details for the file nemoize-0.1.0-py3-none-any.whl.
File metadata
- Download URL: nemoize-0.1.0-py3-none-any.whl
- Upload date:
- Size: 5.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.0 CPython/3.9.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3aa1a02a456120f9bbad39a8859bfc1877a9bc0c271cb3def526ab84b78cf5cf
|
|
| MD5 |
df13a243549f59cd08ddaff3db15754d
|
|
| BLAKE2b-256 |
52a27b2c7e4483bc4f9971c005de0a2742555c1e3a7955c648b3e604499f3fff
|