function wrappers

Marc 'BlackJack' Rintsch bj_666 at
Wed Oct 10 13:42:15 CEST 2007

On Wed, 10 Oct 2007 12:39:24 +0200, Ramon Crehuet wrote:

> def require_int(func):
>        def wrapper(arg):
>            assert isinstance(arg, int)
>            return func(arg)
>        return wrapper
> p1(a):
>    print a
> p2=require_int(p1)
> My question is: why do p2 arguments become wrapper arguments? What is 
> the flux of the arguments in the program when you pass functions as 
> arguments?

The function `p1` is passed into `require_int`.  It is bound to the local
name `func` in `require_int`.  Everytime `require_int` is called a new
function object is created and bound to the local name `wrapper`.  The
name `func` in that new function object refers to the object bound to
`func` in the `require_int` namespace.  Then the new function is returned
still carrying a reference to the `func` object that was passed into

	Marc 'Blackjack' Rintsch

More information about the Python-list mailing list