2016-08-15 29 views
-2

我有一些像这样的代码:如何从其他函数改变locals()的结果?

def f(): 
    i = 5 
    g(locals()) 
    print 'in f:', i, j 

def g(env): 
    env['j'] = env['i'] + 1 
    print 'in g:', env['i'], env['j'] 

f() 

我得到:

in g: 5 6 
in f: 5--------------------------------------------------------------------------- 
NameError         Traceback (most recent call last) 
NameError: global name 'j' is not defined 

似乎f中使得G不能改变()由当地人得到了局部变量。无论如何改变其他函数中的局部变量?

+1

答案是不使用'locals()'。你究竟在努力完成什么? – TigerhawkT3

+1

不,错误指向在函数f()中正在访问的局部变量“j”。 –

+0

@ TigerhawkT3你的意思是说这不是Python中的常见要求吗? – maple

回答

3

按照docs关于locals

注意这本字典的内容不应进行修改; 的更改可能不会影响解释器使用的本地和自由变量的值。

另一种解决方案是返回j

def f(): 
    i = 5 
    j = g(locals()) 
    print 'in f:', i, j 

def g(env): 
    j = env['i'] + 1 
    print 'in g:', env['i'], j 
    return j 

f() 
相关问题