class F(object): def __init__(self, f): self.fs = f if hasattr(f, '__iter__') else [f] def __call__(self, x): if isinstance(x, int): s = ''.join(f(x) for f in self.fs if isinstance(f(x), str)) return x if s == '' else s else: return F(self.fs + [x])
fizz = F(lambda x: 'Fizz' if x % 3 == 0 else '') buzz = F(lambda x: 'Buzz' if x % 5 == 0 else '') gizz = F(lambda x: 'Gizz' if x % 7 == 0 else '')
print [fizz(buzz)(gizz)(x) for x in [1,3,5,7,15,21,35,105]]