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

标签 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()

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

[3, 3]

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

[2, 5]
[2, 5, 3, 3]

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

def main():
    print prime_factors(10, i=2, factors[])
    print prime_factors(9, i=2, factors[])

一切正常。

[2,5]
[3,3]

我不知道为什么。我怀疑这是范围的一些问题,但我只是不明白:-( 任何帮助将不胜感激。

最佳答案

为函数参数定义的默认值是“粘性的”——它们属于函数体本身,因此当您修改它们时,它们会在下一次调用时保持修改状态。

关于python函数在重复调用时返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17557570/

相关文章:

python - 获得变量

python - 在 Flask 中使用 app.add_url_rule 的默认值

python - Pandas 将文件名存储在列表中并将所有文件读入数据框

Python 在图像上绘制动画

python - 查找 C 风格注释的正则表达式

python - 求和范围的时间复杂度

python - 创建一年的每小时系列

python - 我正在学习 Python,为什么在此示例中使用浮点?

python - 在 Python 3 中遍历 TEI,某些实体的文本为空

python - 如何通过 HTTPie 使用空 json 数据发帖?