Can you fix up wrapper function argument signatures?

Gerard Brunick gbrunick at andrew.cmu.edu
Mon Nov 27 17:40:55 EST 2006


Consider:

 >>> def negate(func):
...     def wrapper(*args, **kwargs):
...         return not func(*args, **kwargs)
...     return wrapper
...
 >>> def f(x):
...     return x > 10
...
 >>> g = negate(f)
 >>> g(20)
False
 >>> g(5)
True

Now g has the argument signature of (*args, **kwargs).  Pop-up help in 
Python
Scripter(which is great by the way) tells me this, as does

 >>> g.func_code.co_varnames
('args', 'kwargs')

Is there anyway to fix this in negate?  I assume that I can't just start
changing things in g.func_code since the bytecodes depend on the order
of variables and lots of other stuff that I don't claim to understand.

Please note: From the new functools module, I see that one can set/update
__module__, __name__, __doc__, and __dict__ using the corresponding 
attributes
from the wrapped function; however, none these fix up the argument signature
do they?  (I'm still running 2.4, so I haven't tried it.)

Thanks,
Gerard




More information about the Python-list mailing list