I want to convert generators to reusable iterables. For example, consider generator:
def myrange(n):
for i in range(n):
yield i
It generates one-use iterator:
x = myrange(3)
print(list(x)) # [0, 1, 2]
print(list(x)) # []
I want to add a decorator to the definition of myrange such that it produces reusable iterable (like the usual range) instead of one-use iterator:
x = myrange(3)
print(list(x)) # [0, 1, 2]
print(list(x)) # [0, 1, 2]