Spaces:
Sleeping
Sleeping
| from collections import UserDict, UserList | |
| __all__ = ["LazyDict", "LazyList"] | |
| class LazyDict(UserDict): | |
| def __init__(self, data): | |
| super().__init__() | |
| self.data = data | |
| def __getitem__(self, k): | |
| v = self.data[k] | |
| if callable(v): | |
| v = v(k) | |
| self.data[k] = v | |
| return v | |
| class LazyList(UserList): | |
| def __getitem__(self, k): | |
| if isinstance(k, slice): | |
| indices = range(*k.indices(len(self))) | |
| return [self[i] for i in indices] | |
| v = self.data[k] | |
| if callable(v): | |
| v = v(k) | |
| self.data[k] = v | |
| return v | |
| def __add__(self, other): | |
| if isinstance(other, LazyList): | |
| other = list(other) | |
| elif isinstance(other, list): | |
| pass | |
| else: | |
| return NotImplemented | |
| return list(self) + other | |
| def __radd__(self, other): | |
| if not isinstance(other, list): | |
| return NotImplemented | |
| return other + list(self) | |