作家
登录

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

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

  •              31 PRINT_ITEM           
  •              32 PRINT_NEWLINE        
  •  
  •   7          33 LOAD_CONST               0 (1) 
  •              36 LOAD_CONST               1 (2) 
  •              39 BUILD_LIST               2 
  •              42 STORE_NAME               0 (l) 
  •  
  •   8          45 LOAD_NAME                0 (l) 
  •              48 LOAD_CONST               2 (3) 
  •              51 LOAD_CONST               3 (4) 
  •              54 BUILD_LIST               2 
  •              57 INPLACE_ADD          
  •              58 STORE_NAME               0 (l) 
  •  
  •   9          61 LOAD_NAME                0 (l) 
  •              64 PRINT_ITEM           
  •              65 PRINT_NEWLINE        
  •              66 LOAD_CONST               4 (None) 
  •              69 RETURN_VALUE  
  • 在上诉的字节码, 我们侧重须要看的昵嘟个: BINARY_ADD 和 INPLACE_ADD ! 很明显:

    因为两者的行动真的很类似, 所以在这侧重讲 INPLACE_ADD , 对 BINARY_ADD 感兴趣的童鞋可以在源码文件: abstract.c , 搜刮: PyNumber_Add .实际上也就少了对列表之类对象的操作罢了.

    检查是不是都是`int`类型, 如不雅是, 直接返回两个数值相加的结不雅

    1. # 取自: listobject.c 
    2. PyTypeObject PyList_Type = { 
    3.     ... (省略) 
    4.     &list_as_sequence,                          /* tp_as_sequence */ 
    5.     ... (省略) 
    6.  

    l = l + [3, 4, 5] 这种背后就是 BINARY_ADD

    l += [3, 4, 5] 这种背后就是 INPLACE_ADD

    深刻懂得

    固然两个单词差很远, 但其实两个的感化是很类似的, 最起码前面一部分是, 为什么如许说, 请看源码:

    1. # 取自ceva.c 

        推荐阅读

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

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


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

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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