2013-12-12 2 views
0
>>> 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 

Я искал способ, чтобы прочитать индивидуальную переменную, как значения a и b используя имя переменной не z[0] или z[1].переменные прочитанной под возвратной функции, используя имя переменной

Я также пытаюсь избежать использования глобальных переменных.

ответ

6

Просто назначьте как этот

a, b = x.add() 

Теперь, a будет иметь 8 и b придется 13

+0

набрали почти то же самое, но, тем не менее, вы рок thefourtheye :) –

+0

@SravanKGhantasala вы знаете, вы могли бы оценить Thefoutheye простым upvote ... –

+0

Th anks @thefourtheye –

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. например:

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

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

Какой бы вы затем получить доступ через Python синтаксическое[key], например:

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

Или вы могли бы просто распаковать возвращаемый неназванный кортеж так:

a, b = test.add() 
+0

Спасибо Джеймс Миллс –

1

Кортежи могут быть непапами cked и хранится в переменной также

например.

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

w,x,y,z = getMyTuple() 
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 

он украшает ваш метод с справочник (таким образом, именованные значения) и tranpose их к свойствам объекта, т.е. он будет работать как:

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

print x.a, x.b