2013-06-25 3 views
0

У меня есть функция, и она немного длинная, и поэтому я хочу разбить ее на несколько функций. Моя проблема в том, что я пытаюсь получить несколько значений из одной функции и в другую, и я не уверен, как это сделать.Доступ к нескольким значениям из функции в пределах функции

Например, сказать, что я использовал эти ценности (моя программа намного больше)

def mean(): 
    vitaminA = 5 
    calcium = 15 
    vitaminD = 22 

как бы я получить каждое из этих значений в другую функцию? Я пробовал:

def mean(): 
    vitaminA = 5 
    calcium = 15 
    vitaminD = 22 
    return (vitaminA, calcium, vitaminD) 

def stDev(): 
    mean() 
    print vitaminA 
    print calcium 
    print vitaminD 

Что мне на самом деле нужно делать? Я думал, что если вы вернете значения из другой функции внутри функции, вы можете получить доступ к этим значениям?

+2

Ваша функция возвращает _values_, а не _variables_. Вызывающий может делать с ним все, что захочет. Это может означать включение их в свои собственные переменные (с одинаковыми именами или иначе) или их включение в одну переменную кортежа или передачу их непосредственно другой функции или игнорирование их полностью. Вы должны сказать Python, какой из них вы хотите сделать. Ваш код говорит, что вы хотите их игнорировать. – abarnert

ответ

5

Вам просто нужно присвоить результат вызова mean переменных (или в данном случае, набор переменных):

vitaminA, calcium, vitaminD = mean() 
print vitaminA 
print calcium 
print vitaminD 

Python позволяет распаковать любую итерацию в переменные:

x, y, z = (1, 2, 3) 
print "x: {x}, y: {y}, z: {z}".format(**locals()) 

То же самое относится и к основным генераторам:

def generator_func(): 
    yield "Even" 
    yield "generators" 
    yield "participate" 

w1, w2, w3 = generator_func() 
print w1 
print w2 
print w3 
# Even 
# generators 
# participate 

И я n Python 3 вы также распаковываете:

head, *tail = range(1, 11) 
print head # 1 
print tail # [2, 3, 4, 5, 6, 7, 8, 9, 10] 
3

Вы на правильном пути. Вызывая функцию mean(), вы получите возвращаемые там значения (в частности, переменные). Теперь вы должны назначить их в stDev(), чтобы ухватить значения - как это:

vitaminA, calcium, vitaminD = mean() 

Теперь stDev() имеет доступ к значениям, которые произошли в mean().