如果之前有人问过,请先道歉。我很快就会看到编码的新手。
我已经简化了我想要实现的目标。
本质上,我想将两个变量传递到下面的任一函数中(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 :(得分: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