作家
登录

Python源码理解: +=和 xx = xx + xx的区别

作者: 来源: 2017-06-19 09:02:48 阅读 我要评论

Python源码懂得: +=和 xx = xx + xx的差别

前菜

在我们应用Python的过程, 很多时刻会用到 + 运算, 例如:

先来看看字节码:

  1. a = 1 + 2 
  2.  
  3. print a 
  4.  
  5. # 输出 
  6.  
  7.  

不但在加法中应用, 在字符串的拼接也同样发挥这重要的感化, 例如:

  1. a = 'abc' + 'efg' 
  2.  
  3. print a 
  4.  
  5. # 输出 
  6.  
  7. abcefg  
  1. a = [1, 2, 3] + [4, 5, 6] 
  2.  
  3. print a 
  4.  
  5. # 输出 
  6.  
  7. [1, 2, 3, 4, 5, 6]  

为什么膳绫擎不合的对象履行同一个 + 会有不合的效不雅呢? 这就涉及到 + 的重载, 然而这不是本文要评论辩论的重点, 膳绫擎的只是前菜罢了~~~

正文

先看一个例子:

  1. num = 123 
  2.  
  3. num = num + 4 
  4.  
  5. print num 
  6.  
  7. # 输出 
  8.  
  9. 127  

这段代码的用处很明白, 就是一个简单的数字相加, 然则如许似乎很繁琐, 一点都Pythonic, 于是就有了下面的代码:

  1. num = 123 
  2.  
  3. num += 4 
  4.  
  5. print num 
  6.  
  7. # 输出 
  8.  
  9. 127  

如今我们大年夜概明白了 += 实际上是干嘛了: 它应当能算是一个加强版的 + , 因为它比 + 多了一个写回本身的功能.不过是否可以或许写回本身, 照样得看对象自身是否支撑, 也就是说是否具备 Py_NotImplemented 标识, 是否支撑 sq_inplace_concat , 如不雅具备, 才能实现, 不然, 也就是和 + 效不雅一样罢了.

哈, 如许就很Pythonic了! 然则这种用法真的就是这么好么? 不必定. 看例子:

同样的, 在列表中也能应用, 例如:

  1. # coding: utf8 
  2.  
  3. l = [1, 2] 
  4.  
  5. l = l + [3, 4] 
  6.  
  7. print l 
  8.  
  9. # 输出 
  10.  
  11. [1, 2, 3, 4] 
  12.  
  13. ------------------------------------------ 
  14.  
  15. l = [1, 2] 
  16.  
  17. l += [3, 4] # 列表的+被重载了, 阁下操作数必须都是iterable对象, 不然会报错 
  18.  
  19. print l 
  20.  
  21. # 输出 
  22.  
  23. [1, 2, 3, 4]  

看起来结不雅都一样嘛~, 然则真的一样吗? 我们改下代码再看下:

  1. # coding: utf8 
  2.  
  3. l = [1, 2] 
  4.  
  5. print 'l之前的id: '
     1/8    1 2 3 4 5 6 下一页 尾页

      推荐阅读

      NAS存储市场杀入新军 安全易用是亮点

    【51CTO.com原创稿件】2017年6月14日,杰和科技在北京国度泅水中间为了其NAS办事器新品举办了以“谋势而>>>详细阅读


    本文标题:Python源码理解: +=和 xx = xx + xx的区别

    地址:http://www.17bianji.com/lsqh/35818.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)