下面的代码无法工作,我认为是因为推导式中的 locals() 变量会引用嵌套块,而推导式是在其中评估的:
def f():
a = 1
b = 2
list_ = ['a', 'b']
dict_ = {x : locals()[x] for x in list_}
我可以使用globals()
代替,这似乎可行,但这可能会带来一些其他问题(例如,如果有一个来自周围作用域的同名变量)。
有什么方法可以精确地在函数f
的范围内使用变量并将其放入字典中吗?
注意:我这样做是因为我有很多变量想要稍后放入字典中,但同时又不想使代码复杂化,所以不想写dict_['a']
而是暂时使用a
。
locals()
的使用可能会导致编译器在函数中生成不太优化的代码,但这并不是没有文档记录的问题。例如,如果编译器确定可以优化掉某些临时变量的使用(也许是函数中与您字典无关的其他变量),则如果函数中使用了locals()
,它可能无法做到这一点。此外,通过避免首先创建字典,您需要重复(1)分配每个变量和(2)列表中的名称。 - Greg Hewgill