class IteratorWrapper:
def __init__(self, f, iterator):
self.f = f
self.iterator = iterator
self.gen = None
def __iter__(self):
self.gen = iter(self.iterator)
return self
def __next__(self):
return self.f(next(self.gen))
def iter_map(f, iterator):
return IteratorWrapper(f, iterator)
l = [1]
mapped = iter_map(lambda x: x * 2, l)
for _ in range(2):
for a in mapped:
print(a)
cmapped = map(lambda x: x * 2, l)
for _ in range(2):
for a in cmapped:
print(a)
Y2xhc3MgSXRlcmF0b3JXcmFwcGVyOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGYsIGl0ZXJhdG9yKToKICAgICAgICBzZWxmLmYgPSBmCiAgICAgICAgc2VsZi5pdGVyYXRvciA9IGl0ZXJhdG9yCiAgICAgICAgc2VsZi5nZW4gPSBOb25lCgogICAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgICAgIHNlbGYuZ2VuID0gaXRlcihzZWxmLml0ZXJhdG9yKQoKICAgICAgICByZXR1cm4gc2VsZgoKICAgIGRlZiBfX25leHRfXyhzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5mKG5leHQoc2VsZi5nZW4pKQoKCmRlZiBpdGVyX21hcChmLCBpdGVyYXRvcik6CiAgICByZXR1cm4gSXRlcmF0b3JXcmFwcGVyKGYsIGl0ZXJhdG9yKQoKCmwgPSBbMV0KCm1hcHBlZCA9IGl0ZXJfbWFwKGxhbWJkYSB4OiB4ICogMiwgbCkKCmZvciBfIGluIHJhbmdlKDIpOgogICAgZm9yIGEgaW4gbWFwcGVkOgogICAgICAgIHByaW50KGEpCgpjbWFwcGVkID0gbWFwKGxhbWJkYSB4OiB4ICogMiwgbCkKCmZvciBfIGluIHJhbmdlKDIpOgogICAgZm9yIGEgaW4gY21hcHBlZDoKICAgICAgICBwcmludChhKQ==