[英]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.