【发布时间】:2014-07-08 20:44:10
【问题描述】:
我正在使用递归函数对 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(),则在函数调用开始时将其关闭,并在递归期间重新添加它。在实践中,这变得非常复杂,虽然它最终可能会起作用,但我想知道是否有更实用或更简单的解决方案。
有没有办法在不直接传递/返回的情况下共享变量?
【问题讨论】:
-
你的函数当前返回什么?它会改变
listIn还是创建并返回一个新列表? -
好吧,我猜它会返回一个新列表,因为我创建了一个要返回的新列表对象,但它使用输入列表中的相同元素并将它们按排序顺序添加到新列表中。您输入一个列表,该函数按排序顺序输出列表。我现在让它按顺序正确输出列表,但我只是在让它计算排序过程中交换或倒置的数量时遇到了问题,这是我的算法类中的实际分配。
标签: python recursion global-variables return-value