是否有任何引用指向当前范围,我查找了很多文章但找不到答案,例如我想在当前范围内打印每个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__)
....
答案 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一个。
如果您不想要__.*__
个变量,只需将其过滤掉即可。