为了账号安全,请及时绑定邮箱和手机立即绑定

每次调用myfunc()时value都是None,但是id(myfunc())的值为什么不同?

每次调用myfunc()时value都是None,但是id(myfunc())的值为什么不同?

qq_花开花谢_0 2023-04-25 14:10:40
下面示例:>>> def function(data=[]):...     data.append(1)...     return data... >>> function()[1]>>> function()[1, 1]>>> function()[1, 1, 1]>>> id(function())3076744140L>>> id(function())3076744140L说明python实际上是先把默认参数的值计算出来,以后每次调用都是用以前计算出的值. 这里每次function调用使用同一个data, 这里的data是可变对象, 因此data的值不断append.那么下面的例子:>>> def myfunc(value=None):...     if(value is None):...             value=[]...     value.append(5)...     return value... >>> myfunc()[5]>>> myfunc()[5]>>> id(myfunc())3070938636L>>> id(myfunc())3070938284L>>> id(myfunc())3070938284LNone是一个常量, 是一个不可变对象, 每次调用myfunc()时value都是None,但是id(myfunc())的值为什么不同呢?
查看完整描述

2 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

默认参数只被计算一次。

上者是修改,下者是赋值,不一样:一个是对一个对象操作,一个是更替对象


查看完整回答
反对 回复 2023-04-28
?
慕容3067478

TA贡献1773条经验 获得超3个赞

第一个例子中 data 是固定的,因此 id(data) 是固定的。

第二个例子中每次 value 都是一个新的 list,因此每次 id(value) 都不一样。


查看完整回答
反对 回复 2023-04-28
  • 2 回答
  • 0 关注
  • 67 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信