重复调用时,python函数返回不同的结果

Ste*_*ing 3 python

当我运行下面的python代码时,

def main():
    #print prime_factors(10)
    print prime_factors(9)

def prime_factors(n, i=2, factors=[]):
    if n==1:
        return factors
    if(n%i==0):
        factors.append(i)
        n = n/i
        return prime_factors(n, i, factors)
    else:
        return prime_factors(n, i+1, factors)

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

它返回预期结果,返回9的素数因子:

[3, 3]
Run Code Online (Sandbox Code Playgroud)

如果我从第2行"print prime_factors(10)"中删除注释,就会发生一些奇怪的事情.对于10,一切都很好,但对于9,它不仅包含9的素数因子,而且包含10的素数因子:

[2, 5]
[2, 5, 3, 3]
Run Code Online (Sandbox Code Playgroud)

如果我用两个可选参数调用该函数

def main():
    print prime_factors(10, i=2, factors[])
    print prime_factors(9, i=2, factors[])
Run Code Online (Sandbox Code Playgroud)

一切正常.

[2,5]
[3,3]
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚为什么.我怀疑这是范围的一些问题,但我只是不明白:-(任何帮助将不胜感激.

Mar*_*som 6

为函数参数定义的默认值是"sticky" - 它们属于函数体本身,因此当您修改它们时,它们会保持修改以进行下一次调用.