如何将locals()中的值赋给具有相同名称的局部变量?

时间:2018-05-03 12:24:21

标签: python local-variables

这有效:

def foo():
    locals().update({'bar': 12})
    print(locals()['bar'])  # 12

这失败了:

def foo():
    locals().update({'bar': 12})
    bar = locals()['bar']  # KeyError: 'bar'
    print(bar)

3 个答案:

答案 0 :(得分:5)

https://docs.python.org/3/library/functions.html#locals

  

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

编辑但如上所述,bar = 12当然有效:

>>> def foo():
...     bar = 12
...     bar_ = locals()["bar"]
...     print(bar_)
...     
... 
>>> foo()
12

答案 1 :(得分:0)

更改变量的名称。我的意思是:

bar = locals()['bar']  # KeyError: 'bar'

tmp = locals()['bar'] # 12

答案 2 :(得分:-1)

运行此代码时:

def foo():
    locals().update({'bar': 12})
    print locals()
    bar = locals()['bar']

输出是: 第一个{}被打印出来 然后我们得到KeyError

因此,当您尝试为变量(locals)分配值时,我猜测您的bar = locals()['bar']没有得到更新。但它在你的第一种情况下工作正常,因为你没有做任何任务。

修改1 : 我浏览了你的github链接,我建议你使用dict代替locals。例如,

def base_config():
    return dict(num_epochs=50, bath_size=200, gradient_clipping=100.0)