Python:通过名称访问调用栈中变量的值
关于关闭的问题:这个问题被建议为重复问题,但实际上这两个问题问的是不同的内容:找出一个变量的名字和通过名字访问一个值。希望上天保佑那些在按下重复按钮之前仔细审查问题的读者。
Python - 找到传递给函数的变量的名字
假设我有一个函数用来打印一个变量的内容:
def printVariable(varname, val):
print "%s: %s" % (varname, val)
printVariable('x', x)
我该如何修改这个函数,让它查看调用栈并提取变量的值呢?
def printVarible(varname):
val = WHAT MAGIC GOES HERE?
print "%s: %s" % (varname, val)
printVariable('x')
变量的解析应该在调用者的作用域内……如果在一个函数里有一个局部变量,它应该优先于全局变量。
3 个回答
0
这有点奇怪,但你可以用 **kwargs 来实现你想要的效果。
def foo(**kwargs):
return kwargs
在一个实际的例子中,它可能是这样的:
this = 13
foo(this=this) # returns {'this': 13}
如果你使用 locals()
,你会得到函数定义中参数的名字。例如……
def bar(your_arg):
return locals()
上面的代码总是会把 your_arg
作为字典的键,不管它的名字是什么。
0
你想要查看这个变量的值,那就直接这么做:
val = eval('x')
如果你想知道有哪些东西被定义了,可以看看 locals()
和 globals()
提供的字典。
2
inspect模块可以让你从调用栈中提取值。这个功能会接受一个变量列表,并打印出它们的值。
import inspect
def printVaribles(*args):
for arg in args:
print "%12s:%s"%(arg, inspect.stack()[1][0].f_locals[arg])
printVariables('x','y','z')