2013-07-25 260 views
2

如果之前已經詢問過,請先致歉。我很快就會看到編碼的新手。從python函數返回值

我簡化了下面我想要實現的內容。本質上,我想將兩個變量傳遞到下面的任一函數中(fun1或fun2可以首先啓動)。一旦val1或val2達到0,我想返回替代值。顯然在下面的例子中,val2將始終達到0,fun1將首先啓動。

我想知道是否有辦法將值返回等值線?我明白下面的例子會在這兩個函數之間創造一些荒謬的循環,但我不知道如何完成我所追求的,沒有大量的if語句和單數函數。

任何幫助將不勝感激。

def fun1(val1, val2): 
     val2 -= 1 
     if val2 > 0: 
      print "val2: ", val2 
      fun2(val1, val2) 
     else: 
      print "val2 ended" 
      return val1 

    def fun2(val1, val2): 
     val1 -= 1 
     if val1 > 0: 
      print "val1: ", val1 
      fun1(val1, val2) 
     else: 
      print "val1 ended" 
      return val2 

    blah = fun1(10,8) 
    print blah 
+0

你的意思是返回第5行fun2的結果嗎? –

+0

是的,看來這就是我要去的地方 – user1887639

回答

2

你非常接近,可以遞歸地做到這一點,這是什麼一樣的是,它會返回由該函數返回被稱爲價值,等等等等,直到遞減至-1,然後它會最終數目返回等等

def fun1(val1, val2): 
    val2 -= 1 
    if val2 > 0: 
     print "val2: ", val2 
     return fun2(val1, val2) 
    else: 
     print "val2 ended" 
     return val1 

def fun2(val1, val2): 
    val1 -= 1 
    if val1 > 0: 
     print "val1: ", val1 
     return fun1(val1, val2) 
    else: 
     print "val1 ended" 
     return val2 

blah = fun1(10,8) 
print blah 

這將結果存儲在blah

+0

輝煌,謝謝 – user1887639

+0

@ user1887639沒問題,記得接受答案:)讓我知道你是否需要我解釋更多 – Stephan

1

確保你的return fun2(...)return fun1(...)。如果沒有return,Python函數默認返回None

def fun1(val1, val2): 
    val2 -= 1 
    if val2 > 0: 
     print "val2: ", val2 
     return fun2(val1, val2) 
    else: 
     print "val2 ended" 
     return val1 

def fun2(val1, val2): 
    val1 -= 1 
    if val1 > 0: 
     print "val1: ", val1 
     return fun1(val1, val2) 
    else: 
     print "val1 ended" 
     return val2 

blah = fun1(10,8) 
print blah 
+0

輝煌,謝謝 – user1887639

2

很容易!當你進行遞歸調用(調用其他函數)時,只需返回它們的值而不是忽略它。像這樣:

def fun1(val1, val2): 
    val2 -= 1 
    if val2 > 0: 
     return fun2(val1, val2) # RETURN the result! 
    else: 
     print "val2 ended" 
     return val1 

def fun2(val1, val2): 
    val1 -= 1 
    if val1 > 0: 
     return fun1(val1, val2) # RETURN the result! 
    else: 
     print "val1 ended" 
     return val2 

這樣,無論您採用哪個代碼路徑,您總是會將每一步的結果返回到上一級。

+0

輝煌,謝謝 – user1887639