Python 如何将locals()中的值赋给具有相同名称的局部变量?
这项工作:Python 如何将locals()中的值赋给具有相同名称的局部变量?,python,local-variables,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) 注意本词典的内容不得修改;更改可能不会影响解释器使用的本地变量和自由变量的值 编辑:但如上所述,bar=12
def foo():
locals().update({'bar': 12})
print(locals()['bar']) # 12
这失败了:
def foo():
locals().update({'bar': 12})
bar = locals()['bar'] # KeyError: 'bar'
print(bar)
注意本词典的内容不得修改;更改可能不会影响解释器使用的本地变量和自由变量的值
编辑:但如上所述,bar=12
当然有效:
>>> def foo():
... bar = 12
... bar_ = locals()["bar"]
... print(bar_)
...
...
>>> foo()
12
运行此代码时:
def foo():
locals().update({'bar': 12})
print locals()
bar = locals()['bar']
输出为:
首先打印{}
然后我们得到一个KeyError
因此,我猜当您尝试为变量赋值时(bar=locals()['bar']
),您的局部变量没有得到更新。但在你的第一个案例中效果很好,因为你没有做任何作业
编辑1:
我浏览了你的github链接,我建议你使用dict
而不是locals
。比如说,
def base_config():
return dict(num_epochs=50, bath_size=200, gradient_clipping=100.0)
更改变量的名称。我的意思是:
bar = locals()['bar'] # KeyError: 'bar'
在
你到底为什么要做这样的事呢???为什么不干脆bar=12
?@NitheeshMN这是在代码片段中提到的一条注释:“KeyError:'bar'”@danijar对于你的具体用例,你最好改用简单的dict,真的。滥用locals()。(是的,我只是想开个蹩脚的玩笑。起诉我。)我认为问题在于,当为名称bar
赋值时,Python将bar
视为一个尚未定义的变量。我假设这与locals()
的性能优化有关,有时是dict,有时是数组。谢谢您的编辑。问题是dict不允许我根据前面的值计算一些值。我会做config=dict();配置['first_param']=12;config['second_param']=0.5*config['first_param']
但我希望有更好的语法。
tmp = locals()['bar'] # 12