2015-11-02 79 views
0
def a(): 
    b = 1 
    def x(): 
     b -= 1 
    if something is something: 
     x() 
a() 

什麼IM希望這裏是從a()x() 改變b我已經嘗試使用;Python3變量

def a(): 
    b = 1 
    def x(): 
     global b 
     b -= 1 
    if something is something: 
     x() 

a() 

但是,正如我所料,這告訴我全局b沒有定義。

b需求x()後更改爲已運行,並且如果x()被稱爲第二次b需要什麼x()將其設置爲 - 0不是它最初設定爲a() - 1

回答

3

爲了要更改在包含範圍中定義的變量的值,請使用nonlocal。該關鍵字類似於global(表示該變量應該被認爲是全局範圍內的綁定)。

所以你可以試試:

def a(): 
    b = 1 
    def x(): 
     # indicate we want to be modifying b from the containing scope 
     nonlocal b 
     b -= 1 
    if something is something: 
     x() 

a() 
+0

你能否詳細說明在所有非本地到底是什麼。非常新的Python(很好的編程一般) – user4341854

+0

比你,這個解釋是完美的 – user4341854

1

這應該工作:

def a(): 
    b = 1 
    def x(b): 
     b -= 1 
     return b 
    b = x(b) 
    return b 
a() 
+0

謝謝,但我希望有一種方法來做到這一點,而不使用'返回' – user4341854