Python 在字典理解中使用locals()

Python 在字典理解中使用locals(),python,python-3.x,list-comprehension,Python,Python 3.x,List Comprehension,我假设以下代码不起作用,因为construction中的locals()变量将引用计算construction的嵌套块: def f(): a = 1 b = 2 list_ = ['a', 'b'] dict_ = {x : locals()[x] for x in list_} 我可以改为使用globals(),它似乎可以工作,但这可能会带来一些额外的问题(例如,如果来自周围范围的变量恰好具有相同的名称) 是否有任何东西可以使字典在函数f的范围内精确地使用变

我假设以下代码不起作用,因为construction中的locals()变量将引用计算construction的嵌套块:

def f():
    a = 1
    b = 2
    list_ = ['a', 'b']
    dict_ = {x : locals()[x] for x in list_}
我可以改为使用
globals()
,它似乎可以工作,但这可能会带来一些额外的问题(例如,如果来自周围范围的变量恰好具有相同的名称)

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


注意:我这样做是因为我有很多变量,我想稍后放入字典,但不想同时编写
dict_uu['a']
而不是
a
,从而使代码复杂化。

您也许可以这样做:

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

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

我相信你是对的:dict comprehension中的
locals()
将引用comprehension的名称空间

一种可能的解决方案(如果您尚未想到):


我没想到这个!为什么这样使用locals()不好?我没有使用任何未记录的东西,是吗?它不是未记录的,但是使用
locals()
可能会触发编译器为引用它的函数生成不太理想的代码。例如,如果编译器确定它可以优化某些临时变量(可能是函数中与词典无关的其他变量)的使用,那么如果在函数中使用
locals()
,它可能无法做到这一点。此外,通过避免先创建字典,您可以重复自己的操作(1)每个变量的赋值,以及(2)列表中的名称。然后,我被卡住了:
f_locals = locals()
dict_ = {x : f_locals[x] for x in list_}