使用变量名称在return函数下读取变量

时间:2013-12-12 10:54:39

标签: python python-2.5

>>> class test():
...     def add(self):
...         a = 3+5
...         b = 4+9
...         return a,b
...     
>>> x = test()
>>> x.add()
(8, 13)
>>> z = x.add()
>>> z[0]
8
>>> z[1]
13

我正在寻找使用变量名称ab来读取z[0]z[1]的单个变量的方法。

我也试图避免使用全局变量。

4 个答案:

答案 0 :(得分:6)

只需像这样分配

a, b = x.add()

现在,a将有8个,b将有13个

答案 1 :(得分:2)

您可以使用collections.namedtuple()

from collections import namedtuple


Values = namedtuple("Values", ["a", "b"])


class Test():

    def add(self):
        a = 3 + 5
        b = 4 + 9

        return Values(a=a, b=b)


test = Test()
x = test.add()
print x.a
print x.b

<强>输出:

8
13

您也可以返回dict。 e.g:

def add():
    a = 3 + 5
    b = 4 + 9

    return {"a": a, "b": b}

然后您可以通过Python 语法糖 [key]访问,例如:

x["a"]
x["b"]

或者您只需解压缩返回未命名的元组,就像这样:

a, b = test.add()

答案 2 :(得分:1)

元组可以解压缩并存储在变量

例如。

x,y,z = 2,3,4
def getMyTuple():
   return a,b,c,d

w,x,y,z = getMyTuple()

答案 3 :(得分:1)

你也可以使用这种萨满教:

class wrap:
    def __init__(self, **data):
        self.__dict__.update(data)

def named(m):
    def f(self):
        a,b = m(self)
        return wrap(**{'a': a, 'b': b})
    return f

class test:
    @named
    def add(self):
        a = 3+5
        b = 4+9
        return a,b

它用dictonary(因此,命名值)装饰你的方法并将它们转移到对象的属性,即它将起作用:

t = test()
x = t.add()

print x.a, x.b