Python:重新初始化函数的默认值以供后续调用

1 投票
3 回答
514 浏览
提问于 2025-04-15 21:07

我有一个函数,它会自己调用自己来增加和减少一个栈的值。

我需要多次调用这个函数,并希望它在后续的调用中表现得一样。

但是,正如我预料的那样,它并不会重新使用默认值。

我听说过这是新手常犯的错误,也看过一些建议的解决方案,但我一直没能让任何解决方案奏效。

如果能有一个“fun.reset”的功能就好了。

def a(x, stack = [None]):
    print x,'  ', stack
    if x > 5:
        temp = stack.pop()
    if x <=5:
        stack.append(1)
    if stack == []:
        return    
    a(x + 1)

print a(0)
print a(2)  #second call
print a(3)  #third call

我原以为这样可以工作,但实际上并不行。

print a(0, [None])
print a(2, [None])  #second call
print a(3, [None])  #third call

我能把这个函数重置到最初的状态吗?

任何帮助都将不胜感激。

3 个回答

0

这个问题出现的原因是你修改了一个默认参数,而这个参数是可以改变的。就像Kai的回答里说的,通常我们解决这个问题的方法就是不去修改这个默认参数。

3
def a(x, stack = None):
    if stack is None:
        stack = [None]
    ...

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。

4

在进行递归调用时,直接把栈传递进去:

def a(x, stack=None):
    if stack is None:
        stack = [None]
    ...
    a(x + 1, stack)

撰写回答