Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import functools
- import operator
- class Compositor:
- def __init__(self, gen):
- self._gen = gen
- def __or__(self, other):
- if isinstance(other, Compositor):
- return other._gen(self._gen)
- def __ror__(self, other):
- try:
- other = iter(other)
- except TypeError:
- raise Exception('Need an iterable')
- return self._gen(other)
- def make_composition(gens):
- return functools.reduce(operator.or_, [Compositor(e) for e in gens])
- def gen1(source):
- for i in source:
- if i % 2 == 0:
- yield i **2
- else:
- yield i ** 3
- def gen2(source):
- for i in source:
- yield i * 5
- def gen2(source):
- for i in source:
- yield i - (i * 5)
- def gen3(source):
- for i in source:
- yield i - (i * -6)
- def gen4(source):
- for i in source:
- yield i / 2
- if __name__ == '__main__':
- source = list(range(1000))
- result1 = make_composition([source, gen1, gen2, gen3, gen4])
- result1 = list(result1)
- result2 = list(source | Compositor(gen1) | Compositor(gen2) | Compositor(gen3) | Compositor(gen4))
- print(list(result2)[:10]) #prints the first 10 results
- print('Results are the same:' ,result1 == result2)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement