2017-08-16 72 views
-1

我想達到的目標是:Python 3如何存儲局部變量?

def foo(self): 
    i = 4 
    self.bar(__something_which_holds_foo_variables__) 
    print(i) # prints 8 
    print(j) # prints 2 

def bar(self, vars): 
    vars.j = 2 
    vars.i = vars.i * vars.j 

訪問從另一個方法的方法的所有局部變量。

使用嵌套方法和nonlocal變量不是一個選項,因爲foobar可能在不同的模塊中。 通過名稱傳遞變量也不是一個選項,因爲bar()可能會產生其他變量,我想稍後將其用作foo()中的當地人。此外,潛在bar()可能會使用很多來自foo()的變量。

是否有可能實現這一點,以及爲什麼這樣的想法可能是好還是壞?

+1

你對'self'的使用意味着你正在使用'class' ......如果是這樣的話 - 你應該只存儲所有方法在類的實例中共同的東西...... –

+0

在上面的例子中,是的。但我明確指出,'foo'和'bar'可能在不同的模塊中。無論如何,我用不同的方式解決了這個問題 –

回答

0

只需使用(對於不同的模塊):

def bar(): 
    global modulename.i 

或者如果它是一類則:

def bar(): 
    global modulename.classname.i 

這種想法可能很簡單,因爲你可以只讓bar(...)返回定義,並讓它以某種形式的元組返回新的i和j。

+0

你不需要'全局'來閱讀東西,只是爲了*修改它。但是,讓你的函數依賴於像這樣的其他模塊的值(除非它們是常量)或者讓它們修改這些值可能會導致很難發現錯誤。如果'modulename.i'改變了,'bar()'可能會突然返回另一個值......通過設置參數來爲輸入函數* explicit *插入一個好主意。反過來說,如果使用'global',任何對'bar()'的調用都可能修改'modulename.i',這會影響所有其他使用'modulename.i'的代碼的結果。 –

+0

感謝您的信息,:) –