2013-03-23 99 views
0

這個代碼通過python3關閉

def gen(x): 
    def f(): 
     return x 

    return f 

print(gen(1)()) 

效果很好混淆。

但是當我運行這段代碼,

def gen(x): 
    def f(): 
     x += 1 
     return x 

    return f 

print(gen(1)()) 

我得到了一個錯誤顯示,

UnboundLocalError: local variable 'x' referenced before assignment

這是怎麼回事? 以及如何理解python3的關閉。

回答

2
def gen(x): 
    def f(): 
     nonlocal x # add this line 
     x += 1 
     return x 

    return f 

print(gen(1)())