• 售前

  • 售后

热门帖子
入门百科

Python运算符+与+=的方法实例

[复制链接]
廊桥遗梦504 显示全部楼层 发表于 2021-10-25 19:34:18 |阅读模式 打印 上一主题 下一主题
Python 中如果须要对一个变量举行增量运算通常有两种写法,a = a + b 或 a += b。固然两种方法可以或许得到同样的效果,但两者却并不完全等价。
加法运算符 +


对于 a = a + b 这条语句来说,现实上执行了两步利用,起首执行 a + b 求出两者的 和,然后再将效果通过赋值运算符 = 赋值给变量 a。
来看下面的示例:
  1. >>> a = 100
  2. >>> b = 200
  3. >>> id(a)
  4. 1796532544
  5. >>> a = a + b
  6. >>> a
  7. 300
  8. >>> id(a)
  9. 17756816
复制代码
  1. >>> a = [11, 22, 33]
  2. >>> b = [44, 55, 66]
  3. >>> id(a)
  4. 54675856
  5. >>> a = a + b
  6. >>> a
  7. [11, 22, 33, 44, 55, 66]
  8. >>> id(a)
  9. 54676416
复制代码
以上分别利用 Python 中的 不可变范例 和 可变范例 各列举了一个示例,并且在执行 a = a + b 语句的前后分别打印了变量 a 的 id,可以看到无论对于 不可变范例 还是 可变范例,最终变量 a 的 id 值都会改变,阐明变量 a 在执行 a = a + b 以后指向了一片新的内存地址。这也比力好理解,因为 a 已经被重新赋值了。
增量赋值运算符 +=


对于运算符 +=,我们通常管它叫作 增量赋值运算符,因为它即完成了 相加 利用,又完成了 赋值 利用。
同样,我们还是分别用 int 和 list 两种数据范例来做演示:
  1. >>> a = 100
  2. >>> b = 200
  3. >>> id(a)
  4. 1796532544
  5. >>> a += b
  6. >>> a
  7. 300
  8. >>> id(a)
  9. 17756784
复制代码
  1. >>> a = [11, 22, 33]
  2. >>> b = [44, 55, 66]
  3. >>> id(a)
  4. 48777616
  5. >>> a += b
  6. >>> a
  7. [11, 22, 33, 44, 55, 66]
  8. >>> id(a)
  9. 48777616
复制代码
对于 不可变范例 的利用,a += b 表现出来的效果和 a = a + b 雷同。而对于 可变范例 的利用却并不完全一样。固然最终变量 a 的 值 雷同,但执行 += 利用后,变量 a 的内存地址并没有改变,也就是说 += 利用对于 可变范例 来说现实上是 就地更改。对于 list 的利用,现实上 a += b 等价于 a.extend(b)。
__add__ 和 __iadd__ 方法


现实上,在 Python 中,加法运算符 + 对应着对象的 __add__ 方法,增量赋值运算符 += 对应着对象的 __iadd__ 方法。
无论对于 不可变范例 还是 可变范例,当执行 a = a + b 时,都会调用 a 的 __add__ 方法。而对于 a += b 的利用来说,当 a 为 不可变范例 时同样会调用 a 的 __add__ 方法,当 a 为 可变范例 时会调用 a 的 __iadd__ 方法举行 就地更改,如果 a 没有实现 __iadd__ 方法,那么才调用 a 的 __add__ 方法。
我们可以用 Python 内置的 hasattr 函数来验证上面的说法。
  1. >>> hasattr(int, '__add__')
  2. True
  3. >>> hasattr(int, '__iadd__')
  4. False
  5. >>> hasattr(list, '__add__')
  6. True
  7. >>> hasattr(list, '__iadd__')
  8. True
复制代码
对于 不可变范例 来说,因为对象自己不可变,如果做相加利用必然会创建新的对象,以是也就没有 __iadd__ 方法。而对于 可变范例 来说,对象自己可变,以是实现了 __iadd__ 方法。
在我们自己界说的范例中如果须要实现以上两个方法,也要依照 Python 现有的规范,肯定要注意自己实现的范例是否可变,根据范例再来确定是否须要实现 __iadd__ 方法。
总结

到此这篇关于Python运算符+与+=的文章就介绍到这了,更多相干Python运算符+与+=内容请搜刮脚本之家以前的文章或继承浏览下面的相干文章希望大家以后多多支持脚本之家!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作