gpt4 book ai didi

Python - 在递归函数中使用共享变量

转载 作者:太空狗 更新时间:2023-10-29 20:42:16 25 4
gpt4 key购买 nike

我正在使用递归函数对 Python 中的列表进行排序,并且我想在函数继续时跟踪排序/合并的次数。但是,当我在函数内声明/初始化变量时,它在函数的每次连续调用中成为局部变量。如果我在函数外声明变量,函数会认为它不存在(即无权访问它)。如何在函数的不同调用之间共享此值?

我试过像这样在函数内外使用“全局”变量标签:

global invcount  ## I tried here, with and without the global tag

def inv_sort (listIn):
global invcount ## and here, with and without the global tag

if (invcount == undefined): ## can't figure this part out
invcount = 0

#do stuff

但我不知道如何检查全局变量的未定义状态并在第一次递归调用时给它一个值(因为在所有连续的递归中它应该有一个值并被定义)。

我的第一个想法是从函数的每次调用中返回变量,但我不知道如何将两个对象从函数中传递出去,而且我已经必须将列表传递出去以进行递归排序工作。我第二次尝试解决此问题涉及将变量 invcount 添加到我传递的列表中作为最后一个带有标识符的元素,例如 “i27”。然后我可以检查最后一个元素中是否存在标识符(本例中的字母 i),如果存在则在函数调用的开头将其 pop() 关闭并重新添加它在递归过程中。在实践中,这变得非常复杂,虽然它最终可能会奏效,但我想知道是否有更实用或更简单的解决方案。

有没有办法在不直接传递/返回变量的情况下共享变量?

最佳答案

您可以做几件事。以你的例子为例,你应该像这样修改它:

invcount = 0

def inv_sort (listIn):
global invcount

invcount += 1

# do stuff

但这种方法意味着您应该在每次调用 inv_sort 之前将 invcount 归零。所以实际上最好将 invcount 作为结果的一部分返回。例如使用这样的元组:

def inv_sort(listIn):

#somewhere in your code recursive call
recursive_result, recursive_invcount = inv_sort(argument)

# this_call_invcount includes recursive_invcount
return this_call_result, this_call_invcount

关于Python - 在递归函数中使用共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23762322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com