在字典理解中使用 locals()

问题描述 投票:0回答:2

以下代码不起作用,我认为是因为推导式内的 locals() 变量将引用评估推导式的嵌套块:

def f():
    a = 1
    b = 2
    list_ = ['a', 'b']
    dict_ = {x : locals()[x] for x in list_}

我可以使用

globals()
来代替,它似乎可以工作,但这可能会带来一些额外的问题(例如,如果周围范围中有一个变量恰好具有相同的名称)。

有什么可以让字典在函数

f
的范围内精确地使用变量吗?

注意:我这样做是因为我有很多变量,我想稍后将它们放入字典中,但不想同时编写

dict_['a']
而不是
a
来使代码复杂化。

python python-3.x list-comprehension
2个回答
8
投票

你也许可以这样做:

def f(): 
    a = 1 
    b = 2 
    list_ = ['a', 'b'] 
    locals_ = locals()
    dict_ = dict((x, locals_[x]) for x in list_)

但是,我强烈反对为此目的使用

locals()


5
投票

你是对的:字典理解中的

locals()
将引用理解的命名空间。

一种可能的解决方案(如果您还没有想到):

f_locals = locals()
dict_ = {x : f_locals[x] for x in list_}
© www.soinside.com 2019 - 2024. All rights reserved.