很多关于Python的Best Practice中都会提到,在函数定义的时候,关键词参数的默认值不要设置成mutable的类型,比如list, dict。那么具体原因是什么呢?之前一直没有去思考,直到膝盖中了一箭。 先看下面的例子:
1 2 3 |
|
调用example()
会返回什么呢?第二次,第三次调用又会返回什么呢?
1 2 3 4 5 6 7 8 |
|
是不是觉得结果有些意外?是的,这就是Python函数的定义机制:
在生命周期中,函数的声明语句只会执行一次,就是在源码被解释器解释的时候,而不是在被调用的时候。