Python:通过名称访问调用栈中变量的值

1 投票
3 回答
1160 浏览
提问于 2025-04-18 04:29

关于关闭的问题:这个问题被建议为重复问题,但实际上这两个问题问的是不同的内容:找出一个变量的名字通过名字访问一个值。希望上天保佑那些在按下重复按钮之前仔细审查问题的读者。

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

撰写回答