访问使用builtin dir()调用函数的命名空间

时间:2012-11-30 18:56:35

标签: python scope

我的范围有问题。我想有一个函数对内置函数dir()的结果进行操作。所以,作为一个简单的例子,我想

>>> print (dir())
>>>  .... bunch of stuff ...

但是,我想定义一个对dir()结果进行操作的函数。但是,如果这样试试

>>> def print_dir(dummy_var=None):
        print dir()
>>> print_dir()
>>> ['dummy_var']

我无法访问名为print_dir的名称空间,我理解这是一个范围的东西并且有意义,但有没有办法访问调用函数的命名空间?或者我必须将dir()的结果传递给函数?喜欢。

>>> act_on_namespace(dir())

记住的具体目标就是这样,

def act_on_namespace()
    for k in dir():
        try:
            print(eval(k).__module__)
        except:
            pass

3 个答案:

答案 0 :(得分:1)

dir会返回sorted,standard python list,正好让您可以按照您认为合适的方式对其进行操作。只需将其存储在变量中,Bob就是你的叔叔。

答案 1 :(得分:0)

为什么不直接在您感兴趣的命名空间中调用dir传递结果?

def act_on_namespace(dir_result)
    for k in dir_result:
        try:
            print(eval(k).__module__)
        except:
            pass

act_on_namespace(dir())

答案 2 :(得分:0)

不,没有像这样直接操纵调用命名空间的方法。最简单的方法是执行您已建议的操作:致电act_on_namespace(dir())。如果你真的想变得疯狂,你可以查看inspect模块,它允许你查看调用堆栈,但这可能不是一个好主意,除非你正在做的是编写某种调试工具。