python中递归函数的全局变量

python中递归函数的全局变量,python,recursion,global-variables,global,Python,Recursion,Global Variables,Global,我正在使用pyhton为名为sphereinput的递归函数返回变量名结果作为输出。通过在递归函数中将其声明为全局,我不必在函数末尾使用return。 当在我的程序的主文件中调用时,函数将返回正确答案的结果。 我的保留意见是,对于函数sphereinput本身的每次调用,全局变量结果都会相应地更新,对吗 def sphereinput(parameters) global result Recursive call to sphereinput result=assign

我正在使用pyhton为名为sphereinput的递归函数返回变量名结果作为输出。通过在递归函数中将其声明为全局,我不必在函数末尾使用return。 当在我的程序的主文件中调用时,函数将返回正确答案的结果。 我的保留意见是,对于函数sphereinput本身的每次调用,全局变量结果都会相应地更新,对吗

def sphereinput(parameters)
    global result
    Recursive call to sphereinput
    result=assigned value
请注意,我在这里没有使用return语句。我必须这样做吗? 此外,每次调用函数后,当我在与主代码相同的文件中定义它时,它会再次开始执行函数下面的代码行,这些代码行是主代码的一部分,不能执行


如果我必须在另一个文件中定义此函数,我如何从主文件调用它,然后在主文件和函数代码文件中定义哪些变量必须是全局变量?

结果将相应更新,但除非您明确这样做,否则不会返回

我不知道你对我是什么意思

每次调用 函数它再次开始执行函数下面的代码行 是主代码的一部分,不能执行

要从主文件调用它,必须首先导入模块(=文件),然后调用其函数:

import myfile
myfile.sphereinput(args)
只要在调用sphereinput之前确保不使用结果变量,就不必在其他任何地方定义结果变量

您也可以用另一种方式递归调用函数,这种方式不需要全局变量:

while True:
  temp = sphereinput(args)
  if temp is None:
    break
  result = temp

在这里,当您不需要任何进一步的递归时,只需返回None。

避免全局变量的困扰,只需返回它即可。这更容易,也不太可能出错。同意@zondo。此外,不能立即对代码正在执行的操作进行推理这一事实也不是一件好事。递归函数通常应该是无副作用的,也就是说,它们不会影响其局部范围之外的任何东西。如果我只返回变量,即使涉及递归,它会给出正确的答案吗?谢谢你的帮助。如果这不起作用,我将详细说明问题!