递归和范围 - 有条件地分配变量 - 没有可变对象传递

时间:2017-02-24 08:02:27

标签: python recursion scope

我对以下功能有所不同:

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!",因为它会随着作业一起返回。

我可以看到发生了什么,但是有人可以解释为什么它正在发生,并且推荐设计模式来获得预期的,希望的为了结果?

Here's a ready to run version

我查看了一堆已经问过的递归问题,我看到的是关于可变对象的问题,所以如果在某个地方重复这些问题,那么道歉。我也不知道该怎么称呼它。

如果我接受了回答,那就是因为值返回到函数返回的嵌套,而不是print语句所示的外部函数作用域。

但我可以使用更多的解释/讨论。

感谢。

1 个答案:

答案 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