在另一个函数中引用变量?

时间:2011-09-02 20:05:59

标签: python variables

我是一位经验丰富的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"

2 个答案:

答案 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"