在字典推导式中使用locals()

10 投票
2 回答
1552 浏览
提问于 2025-04-16 06:22

下面的代码不工作,我猜是因为在这个理解式中,locals()这个变量会指向理解式被评估的嵌套块:

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

我可以用 globals() 来代替,这样似乎可以工作,但这可能会带来一些额外的问题(比如,如果周围的作用域中有一个变量恰好同名的话)。

有没有什么办法可以让字典使用函数 f 中的变量呢?

注意:我这样做是因为我有很多变量想要放到一个字典里,但又不想在这段时间里让代码变得复杂,所以不想写 dict_['a'],而是想直接用 a

2 个回答

5

我觉得你说得对:在字典推导式里面的 locals() 会指向这个推导式的命名空间。

一个可能的解决办法(如果你还没想到的话):

f_locals = locals()
dict_ = {x : f_locals[x] for x in list_}
8

你可以试试这样做:

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

不过,我强烈建议不要为了这个目的使用 locals()

撰写回答