2013-10-08 60 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(),我想用從中xr在這個函數:

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

一種方法是從cong_solv()函數內調用eklid()函數。像這樣的東西應該工作:

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 
0

在Python中,當您返回不止一個變量,它返回一個元組。 您可以通過索引(returned_value [0],returned_value [1])檢索值,或像Mike Driscoll所說的(a,b,c,d = eklid(h,i,k))解開元組。

既然我得到了兩個贊成票,我會給你更好的(我希望)解釋: 每次你返回多個值,它會返回一個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。隨着字典你可以是明確的,因爲你的價值有關鍵的名字。

裏面你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?我是第一個說它返回一個元組的。 OP不知道這樣的事情。我認爲這是他的問題的目標。 –

+1

比較你的答案與那些得到upvotes,並注意到不同之處。作爲第一個回答並不意味着你的答案是最好的答案。無論如何,考慮到OP的知識水平,我想說給OP引入一個新術語而不解釋它的含義可能並不理想。你的答案的一部分只是重複了別人在答案中所說的話,這並不是特別有用。 –