假设我在python中有一个脚本使用了requests模块。它执行了一系列步骤,例如发布数据和处理多个请求。
在脚本中的某个点会引发并排除一个错误,并且该函数将以递归方式在except之外重新运行;也就是说,该函数在except
块中运行。
当该递归函数再次运行时,从该函数的前一次运行传输的数据是否会延续到下一次?我注意到该功能完全完成后,其重复出现的次数在终端中显示了错误。
答案 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
应该将其作为参数接收。
关于所打印的错误:请注意,当您递归调用函数时,函数的调用者“实例”不会结束。直到递归调用结束,程序的“控件”才返回到进行调用的特定实例,并正常完成。
查看本文以获得更好的解释,尤其是调用堆栈部分。