Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nemoize-0.1.0.tar.gz (5.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nemoize-0.1.0-py3-none-any.whl (5.5 kB view details)

Uploaded Python 3

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

Hashes for nemoize-0.1.0.tar.gz
Algorithm Hash digest
SHA256 4f3a6380e34d84f2bc96819ddec84d82fe13c81d91605323676e2207e6f25a4b
MD5 3c32200ddd4702478080c9d1b408e161
BLAKE2b-256 7fa15a16d6bdca8d6ce894c95d121add51c4fa2c87450793811fda9b9b51a644

See more details on using hashes here.

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

Hashes for nemoize-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3aa1a02a456120f9bbad39a8859bfc1877a9bc0c271cb3def526ab84b78cf5cf
MD5 df13a243549f59cd08ddaff3db15754d
BLAKE2b-256 52a27b2c7e4483bc4f9971c005de0a2742555c1e3a7955c648b3e604499f3fff

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page