
Mark writes:
Your patch results in the evaluation order:
evalname1 evalargs1 makedec1 evalname2 evalargs2 makedec2 evalname3 evalargs3 makedec3 calldec3 calldec2 calldec1
Mine (#1009560) gives:
evalname3 evalargs3 makedec3 calldec3 evalname2 evalargs2 makedec2 calldec2 evalname1 evalargs1 makedec1 calldec1
Guido writes:
Since Mark ended up agreeing with your order, the OK is given by default. :-)
Wait... I'm confused. What was the final decision? I favor evalname1 evalargs1 makedec1 evalname2 evalargs2 makedec2 evalname3 evalargs3 makedec3 calldec3 calldec2 calldec1 becase of left-to-right-top-to-bottom evaluation. Is this what it actually does? I imagine this: >>> # Warning - not actual code >>> def dummyDecorator1(x): ... print 'one' ... return x ... >>> def dummyDecorator2(x): ... print 'two' ... return x ... >>> @dummyDecorator1 >>> @dummyDecorator2 >>> def func(): pass two one which somehow seems wrong to me. -- Michael Chermside