繁体   English   中英

Python:重新初始化函数的默认值,以供随后对该函数的调用

[英]Python: re-initialize a function's default value for subsequent calls to the function

我有一个函数,它自己调用以递增和递减堆栈。

我需要多次调用它,并且我希望它在以后的调用中以相同的方式工作

但是,正如预期的那样,它不会重复使用默认值。

我已经读到这是一个新手陷阱,并且已经看到了建议的解决方案,但我一直无法

使任何解决方案有效。

能够“ 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

我可以将功能重置为初始状态吗?

任何帮助,将不胜感激。

进行递归调用时,只需显式传递堆栈即可:

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

发生此问题的原因是您修改了可变的默认参数。 正如Kai的回答一样,通常可以通过不修改默认参数来解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM