On 11/21/2011 09:44 AM, Andrea Crotti wrote:
With one colleague I discovered that the decorator code is always
executed, every time I call
a nested function:
def dec(fn):
print("In decorator")
def _dec():
fn()
return _dec
def nested():
@dec
def fun():
print("here")
nested()
nested()
Will give:
In decorator
In decorator
So we were wondering, would the interpreter be able to optimize this
somehow?
I was betting it's not possible, but I'm I would like to be wrong :)
Your function 'nested' isn't nested, 'fun' is. What you discovered is
that a decorator is always executed, every time a nested decorated
function is defined.
You've also ust proved that it would be an incompatible change. Doesn't
that answer the question? An optimizer that changes the behavior isn't
usually desirable.
--
DaveA
--
http://mail.python.org/mailman/listinfo/python-list