13.2. FP Pattern Pipe
13.2.1. SetUp
>>> from functools import reduce
13.2.2. Problem
>>> def square(x):
... return x ** 2
>>>
>>> def even(x):
... return x % 2 == 0
>>>
>>> def add(a, b):
... return a + b
>>>
>>> data = range(0,100)
>>> data = filter(even, data)
>>> data = map(square, data)
>>> data = reduce(add, data)
>>>
>>> print(data)
161700
13.2.3. Solution
>>> class Pipe:
... def __init__(self, values):
... self.values = values
...
... def map(self, func):
... self.values = map(func, self.values)
... return self
...
... def filter(self, func):
... self.values = filter(func, self.values)
... return self
...
... def reduce(self, func):
... return reduce(func, self.values)
>>>
>>> result = (
... Pipe(range(0,100))
... .filter(even)
... .map(square)
... .reduce(add)
... )
>>>
>>> print(result)
161700
13.2.4. Lambda
>>> result = (
... Pipe(range(0,100))
... .filter(even)
... .map(square)
... .map(lambda x: x+1)
... .filter(lambda x: x>100)
... .reduce(add)
... )
>>>
>>> print(result)
161625
13.2.5. Pipe Operator
>>> class Pipe:
... def __init__(self, value):
... self.value = value
...
... def __repr__(self):
... return str(self.value)
...
... def __rshift__(self, func):
... self.value = func(self.value)
... return self
>>>
>>> def lower(string):
... return string.lower()
>>>
>>> def strip(string):
... return string.strip()
>>>
>>> def replace(string):
... return string.replace('!', '')
>>>
>>> def capitalize(string):
... return string.capitalize()
>>>
>>>
>>> text = ' Hello World! '
>>>
>>> output = (
... Pipe(text)
... >> strip
... >> lower
... >> replace
... >> capitalize
... )
>>>
>>> print(output)
Hello world