Steven D'Aprano wrote:
On Wed, 31 Mar 2010 22:27:05 +0100, MRAB wrote:
LX wrote:
[...]
It looks to me the call stack still includes the additional level of
the decorator... what am I missing? Thank you for your time.
Are you still defining your decorators in the same way as in your
original post?
A decorator shouldn't call the function it's decorating.
*raises eyebrow*
Surely, in the general case, a decorator SHOULD call the function it is
decorating? I'm sure you know that, but your wording is funny and could
confuse the OP.
What I mean is that the function that's doing the decorating shouldn't
call the function; it's the locally-defined wrapper function that calls
the decorated function.
For example, in my version of trace_decorator() it's show() that calls
the decorated function, not trace_decorator() itself.
Unless the word 'decorator' refers to the locally-defined function, in
which case, what do you call the function that does the wrapping, the
one whose name follows the '@'?
In this specific case, where the OP wants a "do nothing pass-decorator",
he should do this:
def decorator(func):
if __debug__:
...
else:
return func
rather than this:
def decorator(func):
if __debug__:
...
else:
def inner(*args):
return func(*args)
return inner
--
http://mail.python.org/mailman/listinfo/python-list