class EqualLengths: def __init__(self, size): self.size = size def __nonzero__(self): return True def __repr__(self): return "True" def equal_lengths(a, b): if isinstance(a, EqualLengths): if a.size == len(b): return a return False if a is False: return a n = len(a) if n == len(b): return EqualLengths(n) return False >>> reduce(equal_lengths, ["a", "b", "cc", "d"]) False >>> reduce(equal_lengths, ["a", "b", "c", "d"]) True
class SumEqual: def __init__(self): self.size = None self.is_equal = True def __add__(self, other): if self.is_equal: if self.size is None: self.size = len(other) else: self.is_equal = (self.size == len(other)) return self def __nonzero__(self): return self.is_equal def __repr__(self): return repr(self.is_equal) >>> sum(["a", "b", "cc", "d"], SumEqual()) False >>> sum(["a", "b", "c", "d"], SumEqual()) True