Python:按名称访问调用堆栈中的变量值

时间:2014-04-27 19:00:27

标签: python

关于结束时的注意事项:此问题已被建议为重复,但这两个问题实际上提出了不同的问题:找到变量的名称按名称访问值< / em>的。 May Heaven祝福读者在按下重复按钮之前仔细阅读问题。

  

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 :(得分:1)

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')

答案 1 :(得分:0)

您想要评估变量,只需:

val = eval('x')

如果您想知道定义的内容,可以查看locals()globals()提供的词典。

答案 2 :(得分:0)

这有点奇怪,但你可以使用** kwargs来达到预期的效果。

def foo(**kwargs):
    return kwargs

在用例中,它类似于:

this = 13
foo(this=this) # returns {'this': 13}

如果使用locals(),您将获得函数定义中参数名称的任何内容。例如......

def bar(your_arg):
    return locals()

上面将始终返回your_arg作为dict的关键字,无论其名称如何。