0

我的范围有问题。我想让一个函数对内置函数的结果进行操作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
4

3 回答 3

1

dir返回一个已排序的标准 python 列表,以便您可以根据需要对其进行操作。只需将其存储在一个变量中,鲍勃就是你的叔叔。

于 2012-11-30T19:00:33.397 回答
0

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

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

act_on_namespace(dir())
于 2012-11-30T19:17:30.557 回答
0

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

于 2012-11-30T19:17:40.740 回答