reusegen

Cache generator's results and reuse them


License
MIT
Install
pip install reusegen==0.1.2

Documentation

reusegen

PyPI Travis (.org)

Generators are exhausted during iteration:

xs = (x * x for x in range(10))
ys = [x + 1 for x in xs]  # [1, 2, ...]
zs = [x + 2 for x in xs]  # []

Sometimes this is not expected. With reusegen, you can reuse generators like lists:

from reusegen import reuse
xs = reuse(x * x for x in range(10))
ys = [x + 1 for x in xs]
zs = [x + 1 for x in xs]
print(ys == zs)  # True

And it also works as decorator:

@reuse
def double(xs):
  for x in xs:
    yield x * 2

By default, the results of generator is cached. You could make it cacheless to save memory as original generator:

xs = reuse(x * x for x in range(10), cache=False)

The generator will be executed multiple times.

TODO

Add cacheless version of reuse.