如何在python中获取当前作用域

时间:2012-08-31 08:57:29

标签: python scope

是否有任何引用指向当前范围,我查找了很多文章但找不到答案,例如我想在当前范围内打印每个var的内容

for x in list(locals()):
    print(x)

但只给我这个,var的名字

__builtins__
__file__
__package__
__cached__
__name__
__doc__

我不想要这样的代码

print(__builtins__)
print(__file__)
print(__package__)
print(__cached__)
print(__name__)
print(__doc__)
....

4 个答案:

答案 0 :(得分:5)

Massable overkill ...在函数中包装过滤和打印本地命名空间。

我不推荐这个。我发布它主要是为了表明它可以完成并获得评论。

import inspect

def print_local_namespace():
    ns = inspect.stack()[1][0].f_locals
    for k, v in ns.iteritems():
        if not k.startswith('__'):
            print '{0} : {1}'.format(k, v)


def test(a, b):
    c = 'Freely'
    print_local_namespace()
    return a + b + c


test('I', 'P')

答案 1 :(得分:4)

要获取值,您可以使用:

for symbol, value in locals().items():
    print symbol, value

locals()会给你一个字典。迭代dict为你提供了密钥。要获取(键,值)对的列表,请使用items方法。

答案 2 :(得分:2)

仅打印locals()中不以'__'开头的变量名称:

for local_var in list(locals()):
    if not local_var.startswith('__'): print local_var

答案 3 :(得分:2)

“当前范围”是什么意思?如果您只是指本地变量,那么locals()就是正确的答案。 如果你的意思是你可以使用的所有标识符[locals + globals + nonlocals ]比事情变得更加混乱。可能更简单的解决方案是this一个。

如果您不想要__.*__个变量,只需将其过滤掉即可。