有没有办法获取带有非局部变量的 dict 对象? [复制]

2023-11-29

我想知道,Python 中是否有一个函数返回一个 dict 对象,其中包含用于封闭函数的非局部变量?喜欢vars() or locals()对于局部变量或globals()对于全球的。

更新: 正如 thebjorn 所指出的,非局部变量是实际使用的嵌套函数中包含在local列表。在3.2.3上有如下代码

>>> def func1():
...     x=33
...     def func2():
...             # Without the next line prints {}
...             print(x)
...             print(locals())
...     func2()
... 
>>> func1()

returns {'x': 33}.


公认的答案是非常非常错误的——f_back给出caller,不是词法父范围!

Python 是词法作用域,而不是动态作用域!

你想要的可以使用描述的方法来完成here:

def nonlocals():
    import inspect
    caller = inspect.currentframe().f_back
    return {k: v for k, v in caller.f_locals.items() if k in caller.f_code.co_freevars}

请注意,这将仅返回函数中实际使用的名称,而不是存在但未使用的非局部变量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法获取带有非局部变量的 dict 对象? [复制] 的相关文章

随机推荐