【发布时间】:2014-04-21 16:55:25
【问题描述】:
我想知道,Python 中有没有一个函数可以返回一个包含在封闭函数中使用的非局部变量的 dict 对象?像 vars() 或 locals() 用于局部变量或globals() 用于全局变量。
更新:
正如 thebjorn 所指出的,嵌套函数中实际使用的非局部变量包含在local 列表中。在3.2.3下面的代码
>>> def func1():
... x=33
... def func2():
... # Without the next line prints {}
... print(x)
... print(locals())
... func2()
...
>>> func1()
返回{'x': 33}。
【问题讨论】:
-
快速测试表明
nonlocal名称包含在 Python 3.3 中的locals中,您使用的是什么版本? -
不,它们只有在本地使用时才会包含在本地...
-
@delnan 我正在使用 3.2.3。在此版本中,
locals()如果在嵌套函数中使用,则返回{}。 -
请展示您用来确定这一点的程序,因为除非 ideone.com 对我撒谎,否则它确实在 3.2.3 中也可以工作。我怀疑你的测试有缺陷。
-
locals()只返回本地变量和 free 变量。如果你的内部函数中有一个非本地函数不是空闲的(即你没有使用它),那么locals()将不会列出它。
标签: python python-3.x