Python递归不返回值

2024-10-02 04:34:19 发布

您现在位置:Python中文网/ 问答频道 /正文

由于某些原因,此代码中的x没有在递归内更新。当我在a(y)中调用b(c)时,x不应该更新吗?当x在b(c)中更新但没有返回到

global nested
def extract(nested,depth):
    y = depth[0]
    depth = depth[1:]
    extract = nested[y]
    newlist(extract)
    return depth
def newlist(x):
    nested = x
    return nested
def recursiveRef(nested,depth):
    """Return element from nested list
    list ->int
    """
    if len(depth) == 0:
        return nested
    else:
        return recursiveRef(nested,extract(nested,depth))

Tags: 代码fromreturndefextract原因elementglobal
3条回答

这就是你想做的吗?在

def recursiveRef(nested,depth):
    """Return element from nested list
    list ->int
    """
    if len(depth) == 0:
        return nested
    else:
        return recursiveRef(nested[depth[0]],depth[1:])

print recursiveRef([[1,2,3],[4,[5,6],7]],[1])
print recursiveRef([[1,2,3],[4,[5,6],7]],[1,1])
print recursiveRef([[1,2,3],[4,[5,6],7]],[1,1,1])

输出

^{pr2}$

我不是Python大师,但我认为问题是x是递归函数的局部函数。您正在更改您的b(c)中的另一个全局x。如果我错了,请纠正我。在

你的代码看起来可疑。当你认为你需要一个全局变量时,通常你需要一个类。考虑在类中包装函数,并使用self.x而不是x

也就是说,“全球”不应该写在你的程序顶部。相反,在修改全局变量的每个函数中都需要它,而不是只读取它的函数。在

def newlist(x):
    global nested
    nested = x
    return nested

相关问题 更多 >

    热门问题