Skip to main content

Memoized dictionaries

Project description

thunk-dict

Dictionaries that enable the lazy evaluation and memoization of callable entries. thunk-dict is meant to serve as a convenient wrapper the lazy evaluation of potentially computationally expensive calls.

Use case

Because Python eagerly evaluates expressions, it is not possible include calls to functions within a dictionary without evaluating those calls first. To mimic lazy evaluation, one may turn to tricks like:

dictionary = {
  "key1": computationally_expensive_function
}

# Call the function later on
result = dictionary["key1"]()

or alternatively, if you also wanted to pass in arguments later on,

dictionary = {
  "key1": lambda *args, **kwargs: computationally_expensive_function(*args, **kwargs)
}

# Call the function later on
result = dictionary["key1"]("blah", parameter=100)

However, this approach suffers from two issues:

  1. It complicates the typing of your dictionaries and its entries and creates boilerplate (as in the second example).
  2. Reaccess requires the computationally expensive functions to be called again (i.e. the call isn't memoized)

thunk-dict attempts to resolve both of these issues.

from thunk_dict import ThunkDict
dictionary = ThunkDict({
  "key1": computationally_expensive_function
})

# Get result from call via simple access
result = dictionary["key1"]

# Subsequent accesses use the memoized result.

For noncallable entries, thunk-dict works just like a regular dict. thunk-dict also features the same API as regular Python dictionaries, meaning you don't have to sacrifice anything by using its wrapper.

Features

  1. Convenient thunk-like behavior in dictionaries
  2. Works for any objects that register with dict
  3. Very low overhead

Installation

From PyPi

pip install thunk-dict

From source distribution

git clone https://github.com/kevalii/thunk-dict.git
cd https://github.com/kevalii/thunk-dict.git
pip install .

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

thunk_dict-0.1.1.tar.gz (2.8 kB view details)

Uploaded Source

Built Distribution

thunk_dict-0.1.1-py3-none-any.whl (3.9 kB view details)

Uploaded Python 3

File details

Details for the file thunk_dict-0.1.1.tar.gz.

File metadata

  • Download URL: thunk_dict-0.1.1.tar.gz
  • Upload date:
  • Size: 2.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.6.8

File hashes

Hashes for thunk_dict-0.1.1.tar.gz
Algorithm Hash digest
SHA256 fb2c60db3adbdef50fa7d6df2ba0a6cf2418a39a441e68f74ba8b18ea0a0008a
MD5 c9bacef5ba8312acfbded203f1e8f801
BLAKE2b-256 1a01127f0dd557d6ad9b71d9fa3ab0b1fbfa5d6ee8228839b0d7fb0b95495ed0

See more details on using hashes here.

File details

Details for the file thunk_dict-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: thunk_dict-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 3.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.6.8

File hashes

Hashes for thunk_dict-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c7bf022ae5b86cf9850753885afd064bf02729b26dfbcfe957b99ad2915bae3a
MD5 516cdcafce42fe8ad292ce090f798937
BLAKE2b-256 def0c72bc948fe0619995266a6e91f909ea998ea0f8df6142443f5c1d847f3cf

See more details on using hashes here.

Supported by

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