使用Python dictionary()时发出:vars

2024-04-19 12:09:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下片段:

a, b = 1, 2
params = ['a', 'b']
res = {p: vars()[p] for p in params}

这给了我KeyError: 'a',而下面的代码可以正常工作:

^{pr2}$

这有什么区别?在


Tags: 代码inforresparamsvarskeyerror区别
3条回答

Python似乎在字典理解中实现了一个闭包(比如,dictcomp

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <dictcomp>
KeyError: 'a'

{/strong>返回的本地代码变量。实际上根据文件:

Without an argument, vars() acts like locals() .

请参见以下示例:

>>> def a():
...   print vars()
... 
>>> a()
{}

如您所见,函数a中没有任何局部变量,因此vars返回一个空字典。在

在您的例子中,作为一种更具Python式的方式,您可以创建一个对象字典:

^{pr2}$

没有任何参数的^{}locals()相似,因为字典理解有自己的作用域,因此没有名为a或{}的变量。在

您可以在这里使用^{}。不带任何参数,它将以LEGB方式执行,或显式地将globals()dict指定为eval

>>> res = {p: eval(p) for p in params}
>>> res
{'a': 1, 'b': 2}

但是,正确的方法是从一开始就创建一个字典,如果你想用变量的名字来访问变量。在

相关问题 更多 >