关于结束时的注意事项:此问题已被建议为重复,但这两个问题实际上提出了不同的问题:找到变量的名称与按名称访问值< / 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')
变量分辨率应该在调用者的范围内......如果它在一个函数中并且有一个局部变量,它应该优先于全局变量。
答案 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的关键字,无论其名称如何。