如何捕获嵌套函数中的当前命名空间?
发布时间:2020-12-20 13:52:17 所属栏目:Python 来源:网络整理
导读:假设有一个人有以下内容: def outer(foo,bar,baz): frobozz = foo + bar + baz def inner(x,y,z): return dict(globals().items() + locals().items()) return inner(7,8,9) inner返回的值是通过合并globals()和locals()返回的字典获得的字典,如图所示.在ge
假设有一个人有以下内容:
def outer(foo,bar,baz): frobozz = foo + bar + baz def inner(x,y,z): return dict(globals().items() + locals().items()) return inner(7,8,9) inner返回的值是通过合并globals()和locals()返回的字典获得的字典,如图所示.在general1中,此返回值将不包含foo,baz和frobozz的条目,即使这些变量在内部可见,因此可以说属于内部命名空间. 一种方便捕获内部命名空间的方法是以下方法: def outer(foo,z,_kluge=locals().items()): return dict(globals().items() + _kluge + locals().items()) return inner(7,9) 有没有比这种kluge更好的方法来捕获内部命名空间? 1除非,即具有这些名称的变量恰好存在于当前全局命名空间中. 解决方法
这不是动态的,并且很可能它不是最好的方法,但您可以简单地访问内部的变量以将它们添加到其“命名空间”:
def outer(foo,z): foo,baz,frobozz return dict(globals().items() + locals().items()) return inner(7,9) 您还可以将外部函数的locals存储到变量中,并使用inner的返回值内的变量: def outer(foo,baz): frobozz = foo + bar + baz outer_locals = locals() def inner(x,z): return dict(outer_locals.items() + globals().items() + locals().items()) return inner(7,9) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |