簡體   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