2014-09-11 140 views
0

我有一個嵌套在其他函數內的函數。我想從嵌套的第一個函數內部改變一個變量。Python:從子/嵌套函數中更改函數中的變量?

def myfunc(): 
    step=0 

    def increment(): 
     step+=1 

    increment() 
    increment() 
    increment() 
    print("Steps so far:", step) 

myfunc() 

給人

UnboundLocalError: local variable 'step' referenced before assignment

如果我嘗試使用global,它不會工作,要麼因爲它試圖取消引用一個變量stepmyfunc不存在。

有沒有辦法做到這一點,而沒有一個全局變量?

回答

2

聲明step作爲nonlocal變量。它將使標識符在封閉範圍內引用變量。只有

def increment(): 
    nonlocal step 
    step += 1 

注意 Python 3.x都有。

+0

@AshwiniChaudhary,你說得對。我在答案中添加了一個註釋。 – falsetru 2014-09-11 13:39:05