当心Python函数可变默认参数(list,set,dict…)的陷阱

  • 时间:
  • 浏览:0
  • 来源:uu快3下载网址_uu快3IOS下载_电脑版

你因此写了以下函数,它有有2个多 默认参数是有有2个 list:

正确的做法应该是:

文章首发于我的此人 博客:www.yuanrenxue.com

微信公众号:猿人学Python

绝大多数情况汇报下,Python是有有2个 干净具有一致性的语言。然而,也不 少数情况汇报会让初学者感到困惑。其中也不 情况汇报是有意识的因此成为潜在的莫名其妙,而也不 都能能 说是语言赘肉。下面当我们看看使用可变默认参数(Mutable default arguments)前会跳出那此莫名其妙的情况汇报。

同时就有注意,该函数要传递有有2个 list对象作为第二个参数,因此函数中对它进行了append操作。

让默认参数为None(None通常是有有2个 很好的选取),每次调用时创建有有2个 新对象。

当该函数被定义时,一次性生成有有2个 list作为默认参数,顶端每次成功调用就有使用的第一次生成的那个list。

因此调用该函数:

Python的默认参数只在函数被定义时生成一次,而非每次调用时生成。这也不原应因此你使用可变默认参数并改变它,所有调用该函数的结果就有这个可变对象。

每次调用该函数,因此第二个参数没人提供(使用默认参数),有有2个 新的list因此生成,也不 输出应该是:

因此,结果从不顶端那样,因此下面曾经: