我試圖找出最有效的方式來創建一個長字節字符串(或bytearray)通過連接多個較短的字符串時,預先知道整個字符串的長度。我做了這個腳本,並與這些結果出來了:Python bytearray verses字節列表
import time
MSG = b'test message'
COUNT = 30000
def bytes_list_test():
tStart = time.clock()
l = []
for i in range(COUNT):
l.append(MSG)
bs = b''.join(l)
print('byte list time:', time.clock() - tStart)
def bytearray_test():
tStart = time.clock()
ba = bytearray()
for i in range(COUNT):
for c in MSG:
ba.append(c)
print('array time:', time.clock() - tStart)
def initialized_bytearray_test():
tStart = time.clock()
ba = bytearray([0x00]*len(MSG)*COUNT)
for i in range(COUNT):
ba[i*len(MSG):i*len(MSG)+len(MSG)] = MSG
print('initialized array time:', time.clock() - tStart)
bytes_list_test()
bytearray_test()
initialized_bytearray_test()
結果:
byte list time: 0.0076534920117410365
array time: 0.08107178658246994
initialized array time: 0.08843219671325642
幾個問題:
1)創建字節的列表,並使用join()方法結果所暗示的路要走嗎?
2)爲什麼使用一個字節列表比使用一個看起來像它是爲這種類型的事物設計的bytearray快得多? 3)你會認爲初始化的數組會比未初始化的數組快,因爲初始化的數組不需要調整大小(注意,它偶爾會執行得更好,但不會太多且不一致)。由於切片操作,速度不是很快嗎?