Revision 1 as of 2005-05-05 02:23:10

Clear message

FunctionWrapper is a design pattern used when dealing with relatively complicated functions. The wrapper function typically performs some prologue and epilogue tasks like

but otherwise it should be fully compatible with the wrapped function, so it can be used instead of it. (This is related to the DecoratorPattern.)

As of Python 2.1 and the introduction of nested scopes, wrapping a function is easy:

{{{#python def wrap(func, pre, post):

}}}

Now, let's wrap something up:

{{{#python def trace_in(func, *args, **kwargs):

def trace_out(func, *args, **kwargs):

def calc(x, y):

}}}

The wrapping effect is:

>>> f = wrap(calc, trace_in, trace_out)
>>> print calc(1, 2)
3
>>> print f(1, 2)
Entering function calc
Leaving function calc
3

Of course, a wrapper would normally perform some more useful task. Have a look [http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/412719 here] for a recipe how to wrap a function that processes files so that the result is recycled from a cache file if appropriate.

Unable to edit the page? See the FrontPage for instructions.