加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何捕获嵌套函数中的当前命名空间?

发布时间: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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读