如何将 locals() 中的值分配给具有相同名称的局部变量?
How to assign a value from locals() to a local variable with the same name?
这个有效:
def foo():
locals().update({'bar': 12})
print(locals()['bar']) # 12
这失败了:
def foo():
locals().update({'bar': 12})
bar = locals()['bar'] # KeyError: 'bar'
print(bar)
https://docs.python.org/3/library/functions.html#locals
Note The contents of this dictionary should not be modified; changes may not affect the values of local and free variables used by the interpreter.
编辑: 但是如上所述,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']
) 时,您的 locals
没有得到更新。但它在你的第一种情况下工作正常,因为你没有做任何任务。
编辑 1:
我查看了您的 github link,我建议您使用 dict
而不是 locals
。例如,
def base_config():
return dict(num_epochs=50, bath_size=200, gradient_clipping=100.0)
更改变量名。我的意思是:
bar = locals()['bar'] # KeyError: 'bar'
在
tmp = locals()['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)
https://docs.python.org/3/library/functions.html#locals
Note The contents of this dictionary should not be modified; changes may not affect the values of local and free variables used by the interpreter.
编辑: 但是如上所述,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']
) 时,您的 locals
没有得到更新。但它在你的第一种情况下工作正常,因为你没有做任何任务。
编辑 1:
我查看了您的 github link,我建议您使用 dict
而不是 locals
。例如,
def base_config():
return dict(num_epochs=50, bath_size=200, gradient_clipping=100.0)
更改变量名。我的意思是:
bar = locals()['bar'] # KeyError: 'bar'
在
tmp = locals()['bar'] # 12