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:
- It complicates the typing of your dictionaries and its entries and creates boilerplate (as in the second example).
- 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
- Convenient thunk-like behavior in dictionaries
- Works for any objects that register with dict
- 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
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
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | fb2c60db3adbdef50fa7d6df2ba0a6cf2418a39a441e68f74ba8b18ea0a0008a |
|
MD5 | c9bacef5ba8312acfbded203f1e8f801 |
|
BLAKE2b-256 | 1a01127f0dd557d6ad9b71d9fa3ab0b1fbfa5d6ee8228839b0d7fb0b95495ed0 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | c7bf022ae5b86cf9850753885afd064bf02729b26dfbcfe957b99ad2915bae3a |
|
MD5 | 516cdcafce42fe8ad292ce090f798937 |
|
BLAKE2b-256 | def0c72bc948fe0619995266a6e91f909ea998ea0f8df6142443f5c1d847f3cf |