I just learned python @ decorator, it's cool, but soon I found my modified code coming out weird problems.
def with_wrapper(param1):
    def dummy_wrapper(fn):
        print param1
        param1 = 'new'
        fn(param1)
    return dummy_wrapper
def dummy():
    @with_wrapper('param1')
    def implementation(param2):
        print param2
dummy()
I debug it, it throws out exception at print param1
UnboundLocalError: local variable 'param1' referenced before assignment
If I remove  param1 = 'new' this line, without any modify operation (link to new object) on variables from outer scope, this routine might working.
Is it meaning I only have made one copy of outer scope variables, then make modification?
Thanks Delnan, it's essential to closure. Likely answer from here: What limitations have closures in Python compared to language X closures?
Similar code as:
def e(a):
    def f():
        print a
        a = '1'
    f()
e('2')
And also this seems previous annoying global variable:
a = '1'
def b():
    #global a
    print a
    a = '2'
b()
This is fixed by add global symbol. But for closure, no such symbol found. Thanks unutbu, Python 3 gave us nonlocal.
I know from above directly accessing to outer variable is read-only. but it's kind of uncomfortable to see preceded reading variable(print var) is also affected.
 
     
     
     
    