在Python中访问父命名空间

5 投票
2 回答
2577 浏览
提问于 2025-04-17 12:16
def c():
    def a():
        print dir()

    def b():
        pass

    a()

c()

这可能是个很简单的问题,但我在网上搜索时找不到答案。我有上面的代码,我想要一个方法来打印出包含方法a和b的命名空间,也就是说,我想要它打印出调用这个方法时所在的命名空间。这样做可能吗?最好是在Python 2.x中。

2 个回答

2

我会选择使用 locals(),像这样:

def c():
    def a(locals_):
        print locals_

    def b():
        pass

    a( locals() )

c()
6

你可以使用标准Python库中的inspect模块:

import inspect

def c():
    def a():
        frame = inspect.currentframe()
        print frame.f_back.f_locals

    def b():
        pass

    a()

c()

不过,使用完frames后应该删除它们,具体可以查看说明


对评论的回复。

限制学生使用inspect功能的可能方法:

import sys
sys.modules['inspect'] = None
sys._getframe = None

撰写回答