我对以下功能有所不同:
from random import randint
def assign_a_value_conditionally():
threshold = randint(1,4)
if threshold > 3:
value = "We made it!"
return value
print('before recursion')
assign_a_value_conditionally()
print('after recursion')
a = assign_a_value_conditionally()
如果函数递归,a = None
。
如果该功能没有递归,a = "We made it!"
我希望a
在两种情况下都等于"We made it!"
,因为它会随着作业一起返回。
我可以看到发生了什么,但是有人可以解释为什么它正在发生,并且推荐设计模式来获得预期的,希望的为了结果?
我查看了一堆已经问过的递归问题,我看到的是关于可变对象的问题,所以如果在某个地方重复这些问题,那么道歉。我也不知道该怎么称呼它。
如果我接受了回答,那就是因为值返回到函数返回的嵌套,而不是print语句所示的外部函数作用域。
但我可以使用更多的解释/讨论。
感谢。
答案 0 :(得分:1)
return
递归调用的结果:
print('before recursion')
# without return, this statement is without effect
return assign_a_value_conditionally()
# print('after recursion') won't be reached
如果需要处理递归结果,则必须先存储结果:
res = assign_a_value_conditionally()
# ... process res
return res