যদি আপনার জেনারেটর এমন এক অর্থে খাঁটি হয় যে এর আউটপুটটি কেবলমাত্র পাস হওয়া যুক্তি এবং ধাপ সংখ্যার উপর নির্ভর করে এবং আপনি ফলস্বরূপ জেনারেটরটি পুনরায় আরম্ভ হতে চান তবে এখানে একটি সাজানোর স্নিপেটটি কার্যকর হতে পারে:
import copy
def generator(i):
yield from range(i)
g = generator(10)
print(list(g))
print(list(g))
class GeneratorRestartHandler(object):
def __init__(self, gen_func, argv, kwargv):
self.gen_func = gen_func
self.argv = copy.copy(argv)
self.kwargv = copy.copy(kwargv)
self.local_copy = iter(self)
def __iter__(self):
return self.gen_func(*self.argv, **self.kwargv)
def __next__(self):
return next(self.local_copy)
def restartable(g_func: callable) -> callable:
def tmp(*argv, **kwargv):
return GeneratorRestartHandler(g_func, argv, kwargv)
return tmp
@restartable
def generator2(i):
yield from range(i)
g = generator2(10)
print(next(g))
print(list(g))
print(list(g))
print(next(g))
আউটপুট:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[]
0
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
1
y = list(y)
আপনার বাকী কোডটি অপরিবর্তিত রেখে ব্যবহার করতে পারেন ।