2013-10-08 2 views
1

Я начал программировать недавно, и я начал с python. Мой вопрос: как я могу использовать результат функции в другой функции?Использовать возвращаемое значение функции

def eklid(p, a, b,): 
    x = [1, 0] 
    y = [0, 1] 
    r = [a, b] 
    q = [0] 
    n = 0 
    while r[n+1] != 0: 
     q.append(r[n] // r[n+1]) 
     r.append(r[n] % r[n+1]) 
     x.append(x[n] - x[n+1] * q[n+1]) 
     y.append(y[n] - y[n+1] * q[n+1]) 

     if p == 0: 
      print(r[n], "=", r[n+1], "*", q[n+1], "+", r[n+2]) 
     elif p == 1: # extended print 
      print(r[n+2], "\t", x[n+2], "\t", y[n+2], "\t", r[n+2], "=", a, "*", x[n+2], "+", b, "*", y[n+2]) 
     elif p == -1: 
      k =1 
     else: 
      print("wrong input") 
     n += 1 
    return x, y, r, q, n, 

У меня есть эта функция eklid(), и я хочу использовать x и r от него в этой функции:

def cong_solv(x, r, b,): 
    result = x/r 
    int_result = int(result) 
    return int_result 

Как я могу это сделать?

ответ

2
# Here, a=x, b=y, c=r, d=q, e=n 
a, b, c, d, e = eklid(h, i, k) 

# Assuming based on your function definitions you want the 
# same value as the third argument 
final_result = cong_solv(a, c, k) 

Вы получаете возвращаемые значения из eklid и сохранить их в переменные. Затем вы используете эти переменные для вызова следующей функции.

Конечно, в реальном коде вы должны назвать свои varialbes лучше, чем я сделал в этом примере. Я сознательно не называл переменные теми же именами, что и внутри функции, чтобы продемонстрировать, что вам не нужно.

2

Один из способов - вызвать функцию eklid() изнутри функции cong_solv(). Нечто подобное должно работать:

def cong_solv(x, r, b): 
    p = "foo" 
    b = "bar" 
    x, y, r, q, n = eklid(p, a, b) 

    result = x/r 
    int_result = int(result) 
    return int_result 
-1

Подобно How do you return multiple values in Python?

  1. Возвращение как кортеж (х, у, г ....) или массив и присвоить кортеж/массив соответственно.
  2. Или назначить их переменным класса и доступ к ним
0

В питона, когда вы возвращаетесь более одной переменной, то она возвращает кортеж. Вы можете получить значение по его индексу (return_value [0], return_value [1]) или распаковать кортеж, как сказал Майк Дрисколл (a, b, c, d = eklid (h, i, k)).

С тех пор, как я получил два downvotes, я собираюсь дать вам лучшее (надеюсь) объяснение: Каждый раз, когда вы возвращаете более одного значения, он возвращает tuple.

def my_function(): 
    a = 10 
    b = 20 
    return a, b 

print type(my_function()) # <type 'tuple'> 

Но если вы возвращаете только одно значение:

def my_function(): 
    a = 10 
    return a 

print type(my_function()) # <type 'int'> 

Так что, если вы хотите использовать значение, вы можете:

Распаковка значения кортежа, как это

a, b = my_function() 

Таким образом вы получите возвращаемые значения в том же порядке, который вы возвращаете внутри my_function.

Переписывая код, вы можете просто сделать:

a, b, c = eklid(10, 20, 30) # it will return a tuple 

И позвоните в другую функцию:

cong_solv(a, b, 20) 

В моем честное мнение, я бы вернуть dict. С dict вы можете быть явным, потому что ваши значения имеют имена ключей.

Внутри вашей eklid функции возврата:

return d # d = {"what_x_means": x, 
     #  "what_y_means": y, 
     #  "what_r_means": r, 
     #  "what_q_means": q, 
     #  "what_n_means": n} 

и получить за его ключ:

d["what_x_means"] 
d["what_r_means"] 
+0

Любая причина downvote? Я первым сказал, что он возвращает кортеж. ОП не знал такого. Я думаю, что это была цель его вопроса. –

+1

Сравните свой ответ с теми, которые получили upvotes, и обратите внимание на различия. Быть первым, кто отвечает, не означает, что ваш ответ самый лучший. Оффлайн, я бы сказал, что введение нового термина в ОП без объяснения того, что это значит, вероятно, не идеально, учитывая уровень знаний ОП. Часть вашего ответа просто повторяет то, что сказал другой человек в своем ответе, что не особенно полезно. –

Смежные вопросы