2017-08-16 67 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

感谢您的信息,:) –