2013-07-25 2 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

Вы имеете в виду возвращение результата fun2 в строке 5? –

+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 s функции 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