# Confused with Functions and decorators

Wojciech Giel wojtekgiel at gmail.com
Sat Jul 19 14:10:14 CEST 2014

```On 19/07/14 11:52, Jerry lu wrote:
> Ok so i am trying to learn this and i do not understand some of it. I also tried to searched the web but i couldnt find any answers.
>
> 1. I dont understand when i will need to use a function that returns another function.
> eg
>                     def outer():
>                           def inner():
>                                 x = 5
>                            return inner
>
>       why not just use inner and forget about the whole outer function?
function compositing is one possible use. Functions are first class
objects so they can be passed as arguments to other functions. in math
you can define function composition  f(x)  * g(x) by saying that (f * g
)(x) = f(g(x)).
so composition of two functions gives you a new function with behaviour
the same as applying fist function to the output of the second.

ex.
you are give two functions f and g to construct their composition:

>>> def outer(f, g):
...     def inner(x):
...         return f(g(x))
...     return inner
...
>>> def f(x):
...     print("f ({}) called".format(x))
...     return x
...
>>> def g(x):
...     print("g ({}) called".format(x))
...     return x
...
>>> h = outer(f, g)
>>> h("test")
g (test) called
f (test) called
'test'

cheers
Wojciech

```

More information about the Python-list mailing list