Skip to content

Instantly share code, notes, and snippets.

@hirokiky
Created September 14, 2016 05:34
Show Gist options
  • Save hirokiky/a98f34c0fc6d026965bf16d020d47750 to your computer and use it in GitHub Desktop.
Save hirokiky/a98f34c0fc6d026965bf16d020d47750 to your computer and use it in GitHub Desktop.
Decotator to memoize results of generator. This will scan until end of the generator at the first of iterating.
from functools import wraps
class MemGen:
def __init__(self, generator):
self.generator = generator
self.mem = []
self.__doc__ = generator.__doc__
def __iter__(self):
if not self.mem:
self.mem = list(self.generator)
return iter(self.mem)
def __next__(self):
if not self.mem:
self.mem = list(self.generator)
for m in self.mem:
return m
def memoize_generator(func):
@wraps(func)
def _wrapped(*args, **kwargs):
return MemGen(func(*args, **kwargs))
return _wrapped
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment