我的范围有问题。我想有一个函数对内置函数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
答案 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
模块,它允许你查看调用堆栈,但这可能不是一个好主意,除非你正在做的是编写某种调试工具。