python 递归函数将最后一个结果作为参数记住[重复]

mfuanj7w  于 2023-03-28  发布在  Python
关注(0)|答案(1)|浏览(148)

此问题在此处已有答案

How can I avoid issues caused by Python's early-bound default parameters (e.g. mutable default arguments "remembering" old data)?(10个答案)
22小时前关门了。
我试图将一个数字分解为2的幂,但我的函数记住了我之前调用的结果。

from math import log

#split number in powers of 2
#n   :  number
#lst :  the current list of numbers
def spn(n, lst=list()):
    if n==1:
        lst.append(n)
        return lst
    else:
        #rdy  :  the ready-to-add number
        rdy=2**((log(n+1,2))-1)
        lst.append(rdy)
        #n-rdy:  the new number to evaluate
        return spn(n-rdy, lst)

例如:

  • spn(1)应返回[1]
  • spn(3)应返回[2.0, 1.0]
  • spn(7)应返回[4.0, 2.0, 1.0]

但它只在我第一次调用函数时起作用,然后在第一次调用后,我以前的结果显示为参数:

为什么会发生这种情况,我该如何解决?

jyztefdp

jyztefdp1#

lst参数的默认值更改为None,如果它是None,则在函数中示例化它。
阅读Python Gotchas关于为什么使用可变的默认参数值是不好的。

相关问题