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

Reply via email to