剛剛看到(並享受)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