递归函数是否会在重复数据后继续转移数据?

时间:2018-10-23 22:52:14

标签: python recursion python-requests

假设我在python中有一个脚本使用了requests模块。它执行了一系列步骤,例如发布数据和处理多个请求。

在脚本中的某个点会引发并排除一个错误,并且该函数将以递归方式在except之外重新运行;也就是说,该函数在except块中运行。

当该递归函数再次运行时,从该函数的前一次运行传输的数据是否会延续到下一次?我注意到该功能完全完成后,其重复出现的次数在终端中显示了错误。

1 个答案:

答案 0 :(得分:0)

它不会保留先前对该函数的调用的任何状态。如果需要在调用之间共享该函数的本地数据,则应将其作为参数传递给该函数。

但是,对该函数的每次调用都具有相同的作用域。保留在函数可用范围之外的任何数据将在递归调用之间共享。示例:

s = "Hello"
def fact (x):
    s = "Bye"
    v = x
    if x == 1:
        return 1
    else:
        return x * fact (x - 1)

在那里,对fact的第一次调用将更改s的值,并且将对所有函数调用(以及在使用s的任何其他地方)进行更改。但是,当您递归调用事实时;在该调用中设置变量v之前,它不等于x + 1,但在该作用域中尚不存在。如果您想保留它,fact应该将其作为参数接收。

关于所打印的错误:请注意,当您递归调用函数时,函数的调用者“实例”不会结束。直到递归调用结束,程序的“控件”才返回到进行调用的特定实例,并正常完成。

查看本文以获得更好的解释,尤其是调用堆栈部分。

https://medium.freecodecamp.org/how-recursion-works-explained-with-flowcharts-and-a-video-de61f40cb7f9