刚刚看到(并享受)Brandon Rhodes在PyCon 2015上谈论有关bytearrays的视频。为什么bytearray_obj.extend(字节)与bytearray_obj + = bytes不同?
他说.extend
方法很慢,但+=
操作的实现方式不同,效率更高。是的,确实如下:
>>> timeit.timeit(setup='ba=bytearray()', stmt='ba.extend(b"xyz123")', number=1000000)
0.19515220914036036
>>> timeit.timeit(setup='ba=bytearray()', stmt='ba += b"xyz123"', number=1000000)
0.09053478296846151
有两种扩展字节数组的方式是什么原因?他们是否执行完全相同的任务?如果不是,有什么区别?哪一个应该在什么时候使用?
除其他外,因为不能分配给函数调用,所以不能链接'+ ='类似函数调用。对于'+ ='有一个可变的局部性要求,但对'.extend()'没有要求。但'+ ='稍快。 – Roope
@Roope什么是可变局部性要求? – VPfB
'+ ='不能用于[非本地变量](https://www.dotnetperls.com/nonlocal-python)。 – Roope