为什么bytearray_obj.extend(bytes)与bytearray_obj + = bytes不同?

时间:2016-10-12 17:11:48

标签: python

刚刚看到(并欣赏)Brandon Rhodes在PyCon 2015上谈论字节数据的视频。

他说{​​{1}}方法很慢,但.extend操作的实现方式不同而且效率更高。是的,确实:

+=

有两种扩展bytearray的方法是什么原因?他们执行完全相同的任务吗?如果没有,有什么区别?什么时候应该使用?

1 个答案:

答案 0 :(得分:0)

  

有两种扩展bytearray的方法是什么原因?

  • 运算符不像函数调用那样可链接,而方法是。
  • +=运算符不能与非局部变量一起使用。
  • +=稍快一点
  • .extend()可能/可能/有时可能更具可读性
  

他们执行完全相同的任务吗?

取决于你如何看待它。实现方式不尽相同,但结果通常是。对于一堆示例和解释,可以尝试SO搜索,例如这个问题:Concatenating two lists - difference between '+=' and extend()

  

什么时候应该使用?

如果您关心小的性能差异,请尽可能使用操作员。除此之外,只要考虑我上面提到的限制,就可以使用你想看的任何一个。

  

但主要问题是为什么+ =和.extend不共享相同的内部函数来完成扩展bytearray的实际工作。

因为一个更快但有局限性,所以我们需要另一个用于我们确实有限制的情况。


加成

增量运算符可能会导致一些有趣的业务与元组:

  

如果你在一个元组中放入一个列表并使用+ =运算符来扩展列表,那么增量会成功,你会得到一个TypeError

来源:https://emptysqua.re/blog/python-increment-is-weird-part-ii/