下面的代码不起作用,我假设是因为code中的locals()变量将引用计算code的嵌套代码块:
def f():
a = 1
b = 2
list_ = ['a', 'b']
dict_ = {x : locals()[x] for x in list_}我可以改用globals(),它似乎可以工作,但这可能会带来一些额外的问题(例如,如果周围的作用域中有一个变量恰好具有相同的名称)。
有没有什么东西可以让字典在function f的作用域中使用变量呢?
注意:我之所以这样做,是因为我有许多变量想稍后放到字典中,但又不想因为在此期间编写dict_['a']而不是a而使代码变得复杂。
发布于 2010-11-01 08:53:09
你也许可以这样做:
def f():
a = 1
b = 2
list_ = ['a', 'b']
locals_ = locals()
dict_ = dict((x, locals_[x]) for x in list_)然而,我强烈反对使用locals()来达到这个目的。
发布于 2010-11-01 08:54:11
我相信您是对的:字典理解中的locals()将引用理解的名称空间。
一个可能的解决方案(如果你还没有想到的话):
f_locals = locals()
dict_ = {x : f_locals[x] for x in list_}https://stackoverflow.com/questions/4065976
复制相似问题