这有效:
def foo():
locals().update({'bar': 12})
print(locals()['bar']) # 12
这失败了:
def foo():
locals().update({'bar': 12})
bar = locals()['bar'] # KeyError: 'bar'
print(bar)
答案 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)