0

可能的重复:
Python 中的“Least Astonishment”:可变默认参数

我试图将一个数字拆分为 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]

但仅在我第一次调用该函数时才有效,然后在第一次调用后我之前的结果显示为参数。

在此处输入图像描述

我该如何解决?

4

1 回答 1

3

lst将您的参数默认值更改为None,如果它是 None 然后在您的函数中实例化它。

阅读有关为什么使用可变默认参数值不好的 Python陷阱。

于 2012-06-05T14:40:59.833 回答