Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将locals()中的值赋给具有相同名称的局部变量?_Python_Local Variables - Fatal编程技术网

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