在python中访问父命名空间

时间:2012-02-03 14:44:35

标签: python

def c():
    def a():
        print dir()

    def b():
        pass

    a()

c()

可能是一个非常简单的问题,但我似乎无法通过谷歌搜索找到答案。我有上面的代码,我想要一个方法来打印包含方法a和b的命名空间,即我希望它打印它所调用的点形式的命名空间。这可能吗?最好在Python 2.x

2 个答案:

答案 0 :(得分:6)

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

import inspect

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

    def b():
        pass

    a()

c()

frames应在使用后删除,请参阅note


回答评论。

限制学生检查功能的可能方法:

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

答案 1 :(得分:2)

我会像locals()那样:

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

    def b():
        pass

    a( locals() )

c()