libb.composable

composable(decorators)[source]

Decorator that takes a list of decorators to be composed.

Useful when list of decorators starts getting large and unruly.

Parameters:

decorators – List of decorators to compose.

Returns:

Composed decorator.

Setup:

>>> def m3(func):
...     def wrapped(n):
...         return func(n)*3.
...     return wrapped
>>> def d2(func):
...     def wrapped(n):
...         return func(n)/2.
...     return wrapped
>>> def p3(n):
...     return n+3.
>>> @m3
... @d2
... def plusthree(x):
...     return p3(x)
>>> @composable([d2, m3])
... def cplusthree(x):
...     return p3(x)

Note: composed decorators are not interchangeable with compose:

>>> func = compose(m3, d2, p3)(4)
>>> hasattr(func, '__call__')
True
>>> compose(lambda n: n*3., lambda n: n/2., p3)(4)
10.5

What they do allow is consolidating longer decorator chains:

>>> plusthree(4)
10.5
>>> cplusthree(4)
10.5