实际上,这不是设计缺陷,也不是由于内部因素或性能所致。
这完全是因为Python中的函数是一流的对象,而不仅仅是一段代码。
一旦您想到这种方式,就完全有道理了:函数是根据其定义求值的对象;默认参数属于“成员数据”,因此它们的状态可能会从一个调用更改为另一个调用-完全与其他任何对象一样。
无论如何,Effbot在Python的Default Parameter Values中都很好地解释了这种现象的原因。
我发现它很清楚,我真的建议您阅读它,以更好地了解函数对象的工作原理。

实际上,这不是设计缺陷,也不是由于内部因素或性能所致。
这完全是因为Python中的函数是一流的对象,而不仅仅是一段代码。
一旦您想到这种方式,就完全有道理了:函数是根据其定义求值的对象;默认参数属于“成员数据”,因此它们的状态可能会从一个调用更改为另一个调用-完全与其他任何对象一样。
无论如何,Effbot在Python的Default Parameter Values中都很好地解释了这种现象的原因。
我发现它很清楚,我真的建议您阅读它,以更好地了解函数对象的工作原理。