在字典理解中使用locals()

时间:2010-11-01 00:46:05

标签: python python-3.x list-comprehension

以下代码不起作用,我假设因为理解中的locals()变量将引用嵌套块,其中评估了理解:

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

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

是否有任何可以使字典在函数f的范围内精确使用变量?

注意:我这样做是因为我有很多变量,我希望稍后将其放入字典中,但不希望通过编写dict_['a']而不是a来使代码复杂化与此同时。

2 个答案:

答案 0 :(得分:4)

你也许可以这样做:

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

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

答案 1 :(得分:1)

我相信你是对的:字典理解中的locals()将引用理解的命名空间。

一种可能的解决方案(如果尚未发生):

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