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
Hashes for thunk_dict-0.1.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c7bf022ae5b86cf9850753885afd064bf02729b26dfbcfe957b99ad2915bae3a |
|
MD5 | 516cdcafce42fe8ad292ce090f798937 |
|
BLAKE2b-256 | def0c72bc948fe0619995266a6e91f909ea998ea0f8df6142443f5c1d847f3cf |