The core idea of a decorator is to transform some original function into another form. A decorator creates a kind of composite function based on the decorator and the original function being decorated.
A decorator function can be used in one of the two following ways:
- As a prefix that creates a new function with the same name as the base function as follows:
@decorator def original_function(): pass
- As an explicit operation that returns a new function, possibly with a new name:
def original_function(): pass original_function = decorator(original_function)
These are two different syntaxes for the same operation. The prefix notation has the advantages of being tidy and succinct. The prefix location is ...