2

如果之前有人问过这个问题,首先道歉。我是编码的新手,你很快就会看到。

我在下面简化了我想要实现的目标。

本质上,我想将两个变量传递给下面的任一函数(可以先启动 fun1 或 fun2)。一旦 val1 或 val2 达到 0,我想返回备用值。显然在下面的例子中,val2 总是会达到 0,而 fun1 会首先被启动。

我想知道是否有办法将值返回给blah?我知道下面的示例将在两个函数之间创建一些荒谬的循环,但我不知道如何完成我所追求的,没有大量的 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
4

3 回答 3

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

于 2013-07-25T18:08:45.967 回答
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

这样,无论您采用哪种代码路径,您总是在每一步将结果返回到上一个级别。

于 2013-07-25T18:08:47.300 回答
1

确保您return fun2(...)return fun1(...). 如果没有returns,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
于 2013-07-25T18:08:35.313 回答