如何将 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