Decorators as higher-order functions

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 ...

Get Functional Python Programming - Second Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.