Function Decorators

Function decorators are used to modify what happens when a function is defined. That is, they affect the behavior of the def statement itself. Decorators are denoted using the special @ symbol, as follows:

@foo
def bar(x):
     return x*2

The preceding code is shorthand for the following:

def bar(x):
    return x*2
bar = foo(bar)

In the example, a function bar() is defined. However, immediately after its definition, the function object itself is passed to the function foo(), which returns an object that replaces the original bar. An example will clarify:

def foo(f):
     def wrapper(*x,**y):
          print "Calling", f.__name__
          return f(*x,**y)
     return wrapper

In this case, foo() places a wrapper function around the original function object. If ...

Get Python: Essential Reference, Third 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.