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

什么时候“i+=x”与Python中的“i=i+x”不同?

什么时候“i+=x”与Python中的“i=i+x”不同?

狐的传说 2019-06-19 15:56:42
什么时候“i+=x”与Python中的“i=i+x”不同?我听说+=可以产生与标准符号不同的效果。i = i +..有没有一个案子i += 1将不同于i = i + 1?
查看完整描述

3 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

在被子下面,i += 1做这样的事:

try:
    i = i.__iadd__(1)except AttributeError:
    i = i.__add__(1)

i = i + 1做这样的事:

i = i.__add__(1)

这有点过于简单化,但是您了解到:Python提供了一种处理类型的方法+=特别是,通过创建一个__iadd__方法以及__add__.

意图是可变的类型,比如list,会变异到__iadd__(然后回来self,除非您正在做一些非常棘手的事情),而不可变的类型,例如int不会实现的。

例如:

>>> l1 = []>>> l2 = l1>>> l1 += [3]>>> l2[3]

因为l2是与l1,你变异了l1,你也变异了l2.

但是:

>>> l1 = []>>> l2 = l1>>> l1 = l1 + [3]>>> l2[]

在这里,你没有变异l1相反,您创建了一个新列表,l1 + [3],并重新命名l1指着它,离开l2指向原始列表。

(在+=版本,您也重新绑定了l1,只是在这种情况下,您重新绑定到相同的list它已经注定了,所以你通常可以忽略这一部分。)


查看完整回答
反对 回复 2019-06-19
  • 3 回答
  • 0 关注
  • 654 浏览
慕课专栏
更多

添加回答

举报

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