# Function composition

Applying a function to the result of another function is called *function composition*.
If you have `f : X → Y`

and `g : Y → Z`

, you can create the composition function `h: X → Z`

: `h(x) = g(f(x))`

.

This is also denoted as `h = g ∘ f`

.

In python, there is no `∘`

operator, but you still can create composition functions via bare lambdas:

```
In : from math import sqrt
In : sqrt_abs = lambda x: sqrt(abs(x))
In : sqrt_abs(-4)
Out: 2.0
```

To make it more semantically precise, you can create your own `compose`

function. Adding clear `repr`

is also a good idea. Here is an example:

```
class compose:
def __init__(self, *functions):
self._functions = functions
def __call__(self, *args, **kwargs):
result = None
for f in reversed(self._functions):
result = f(*args, **kwargs)
args = [result]
kwargs = dict()
return result
def __repr__(self):
return '{}({})'.format(
type(self),
', '.join(repr(f) for f in self._functions)
)
```