LazyEvalDict#

class LazyEvalDict(eval_function, *args, **kwargs)#

Bases: dict

A dictionary that evaluates values lazily upon access.

This class extends the standard Python dictionary to support lazy evaluation of its values. A user-defined function is applied to the value associated with a key the first time that key is accessed. Subsequent accesses return the already-evaluated value without invoking the evaluation function again. This approach is beneficial in scenarios where the value computation is expensive, and the result is needed only on demand.

Attributes:

_eval_function: Callable function used to lazily evaluate values. _evaluated_keys: Set of keys whose values have already been evaluated.

__init__(eval_function, *args, **kwargs)#

Initializes an instance of a class that performs actions based on a provided evaluation function. Ensures the evaluation function is callable and prepares an internal state to track evaluated keys.

Parameters#

eval_functionCallable

A callable used to perform evaluations. Must be passed and checked for its callable nature.

*args

Positional arguments passed to the base class initializer.

**kwargs

Keyword arguments passed to the base class initializer.

Raises#

TypeError

If eval_function is not callable.

Methods

__init__(eval_function, *args, **kwargs)

Initializes an instance of a class that performs actions based on a provided evaluation function.

clear()

copy()

fromkeys(iterable[, value])

Create a new dictionary with keys from iterable and values set to value.

get(key[, default])

Return the value for key if key is in the dictionary, else default.

items()

Return all key-value pairs, forcing evaluation of any unevaluated entries.

keys()

pop(k[,d])

If the key is not found, return the default if given; otherwise, raise a KeyError.

popitem()

Remove and return a (key, value) pair as a 2-tuple.

setdefault(key[, default])

Insert key with a value of default if key is not in the dictionary.

update([E, ]**F)

If E is present and has a .keys() method, then does: for k in E.keys(): D[k] = E[k] If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v In either case, this is followed by: for k in F: D[k] = F[k]

values()

Return all values, forcing evaluation of any unevaluated entries.

clear() None.  Remove all items from D.#
copy() a shallow copy of D#
classmethod fromkeys(iterable, value=None, /)#

Create a new dictionary with keys from iterable and values set to value.

get(key, default=None, /)#

Return the value for key if key is in the dictionary, else default.

items()#

Return all key-value pairs, forcing evaluation of any unevaluated entries.

keys() a set-like object providing a view on D's keys#
pop(k[, d]) v, remove specified key and return the corresponding value.#

If the key is not found, return the default if given; otherwise, raise a KeyError.

popitem()#

Remove and return a (key, value) pair as a 2-tuple.

Pairs are returned in LIFO (last-in, first-out) order. Raises KeyError if the dict is empty.

setdefault(key, default=None, /)#

Insert key with a value of default if key is not in the dictionary.

Return the value for key if key is in the dictionary, else default.

update([E, ]**F) None.  Update D from mapping/iterable E and F.#

If E is present and has a .keys() method, then does: for k in E.keys(): D[k] = E[k] If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v In either case, this is followed by: for k in F: D[k] = F[k]

values()#

Return all values, forcing evaluation of any unevaluated entries.