从python函数返回值

时间:2013-07-25 18:05:35

标签: 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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

这样,无论您采用哪种代码路径,都始终将每一步的结果返回到上一级。

答案 2 :(得分: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