2013-07-23 38 views
2

對不起,因爲我不熟悉python。我覺得這應該是可能的,但我已經在這個網站(其中包括)遍佈各地。我似乎無法直接用嵌套函數更改函數中的變量。我試過python - 使用嵌套函數更改變量

global 

無濟於事。我可以重新分配它來解決這個問題,但會在稍後引發問題。
例子:

def Grrr(): 
    a = 10 
    def nested(c): 
     b = 5 
     c -= b 
    nested(a) 
    return a 

我試圖從

def Grrr(): 
    a = 10 
    def nested(c): 
     b = 5 
     c -= b 
    a = nested(a) 
    return a 

走就走如果是真正的最好的方法,那麼我會使用它,我猜。我只是想出還有這裏的人遠遠比我

回答

4

更好的你可以儘量避免使用參數,而使用nonlocal

def Grrr(): 
    a = 10 
    def nested(): 
     nonlocal a 
     b = 5 
     a -= b 
    nested() 
    return a 

如果你想在一個變量來改變傳遞,但是,它可以」不要做; Python在C++中沒有引用。

†沒有一些可怕的兩輪牛車

+0

我想看到這可怕的兩輪牛車。你只是在討論如何構造一個像'[thing]'這樣的包裝對象,並且傳遞它來代替'thing'(很像Python的閉包實現使用'cell'對象),還是真的有辦法找出哪個變量是一個參數來自和堆棧改變其內容? – user2357112

+0

美的真實之處,正是我所尋找的。謝謝。 – Faller

+0

@ user2357112:我正在考慮走棧,直到找到函數,查看堆棧框架中當前正在執行的任何表達式的AST,以找到它所調用的變量,並修改局部變量'dict'該堆棧幀。 – icktoofay