我是一位经验丰富的TCL开发人员,并编写自己的程序来帮助自己。即 一个proc我调用putsVar,它以definitave格式打印出变量的值,所以我知道它是哪个变量,值是什么“set foo 1; putsVar foo”Result'foo =“1”' 我想在python中做同样的事情,但没有找到答案:(。 在TCL中我使用upvar命令,因为我传入变量的名称,然后我upvar并且可以看到值。
我知道python没有upvar类型的机制,但是凭借其内省能力,我认为这有点微不足道,但我无法在任何地方找到答案。
以下是我认为它应该如何运作:
def printVar(var):
valVar = "some mechanism to look up 1 level here to get value of var"
print str(var) + "=\"" + str(valVar) + "\""
x = "Hello"
printVar("x")
x="Hello"
并延长:
def foo():
y = "Hello World"
printVar("y")
foo()
y="Hello World"
答案 0 :(得分:1)
你可以,但你不应该。如果您的代码完全需要,那么您的设计就会出现问题,您可能应该使用显式传递的字典或具有适当属性的对象。
但是,要直接回答这个问题:您可以使用sys._getframe
。请注意,这可能无法在Python实现中移植(即仅在CPython上工作):
def get_object(name):
return sys._getframe(1).f_locals[name]
x = 'foo bar'
print get_object('x')
def foo():
y = 'baz baf'
print get_object('y')
foo()
答案 1 :(得分:0)
也许我不是100%清楚你想要什么,但你可以稍微扩展printVar,以便传入变量的名称(如你想要的那样)以及变量本身。
def printVar(var, var_name):
print "{0} = {1}".format(var_name, var)
>>> x = 5
>>> printVar(x, "x")
x = 5
>>> y = "Hello"
>>> printVar(y, "y")
y = Hello
据我所知,没有好方法来获取变量名的字符串表示。你必须自己提供。
我会扩展它以更好地适应你的例子:
def printVar(var, var_name):
if type(var) is type(str()):
print '{0} = "{1}"'.format(var_name, var)
else:
print '{0} = {1}'.format(var_name, var)
>>> printVar(x, "x")
x = 5
>>> printVar(y, "y")
y = "Hello"