| 12345678910111213141516171819202122232425262728 |
- from typing import Callable, Generic, Optional, TypeVar
- R = TypeVar("R")
- class Thunk(Generic[R]):
- """
- A simple lazy evaluation implementation that lets you delay
- execution of a function. It properly handles releasing the
- function once it is forced.
- """
- f: Optional[Callable[[], R]]
- r: Optional[R]
- __slots__ = ["f", "r"]
- def __init__(self, f: Callable[[], R]):
- self.f = f
- self.r = None
- def force(self) -> R:
- if self.f is None:
- return self.r # type: ignore[return-value]
- self.r = self.f()
- self.f = None
- return self.r
|