有时候我们在编写函数时,会需要给一些参数设置默认值,这个时候我们需要牢记一点:禁止使用可变对象作为参数默认值。...为什么可变对象作为函数默认值很危险?
我们还是使用上面那个简单的“反例”,再传递几个参数,通过结果,就可以明显地看到为什么不建议我们这样做了。...'1', '2'])) # 期望 -> ['1', '2', '3']
# 实际输出
['1']
['1', '2']
['3']
['1', '2', '3']
从结果我们可以看到,第二次调用函数...这是因为Python函数的默认值只会创建一次,之后第二次调用的时候就是在原默认值上进行修改,而不是重新创建了一个新的默认值,这也就能够解释得通实际结果为什么是这样的了。...(f('3', ['1', '2'])) # 期望 -> ['1', '2', '3']
# 实际输出
['1']
['2']
['3']
['1', '2', '3']
可以看到,把参数默认值设置为不可变对象的写法就完全符合我们的预期了