轉換爲整數時,到其字節字符表示要具體,我需要轉換爲整數,說9999
,成字節,b'9999'
在Python 2.6可達蟒蛇3.X性能蟒蛇
在蟒蛇2.X我做
b'%s'%n
而在Python 3.X
('%s'%n).encode()
性能在Python 2.6
>>> from timeit import Timer
>>> Timer('b"%s"%n','n=9999').timeit()
0.24728001750963813
在python 3.2
>>> from timeit import Timer
>>> Timer('("%s"%n).encode()','n=9999').timeit()
0.534475012767416
假設我的基準性能被正確設置,即在python 3.x的一個沉重的懲罰
有沒有一種方法來提高性能來彌補2.6/2.7的差距?
也許通過cython路線?
這是我試圖優化的生成器函數。它與args
是一個字符串列表叫了個遍,字節或數字:
def pack_gen(self, args, encoding='utf-8'):
crlf = b'\r\n'
yield ('*%s\r\n'%len(args)).encode(encoding)
for value in args:
if not isinstance(value, bytes):
value = ('%s'%value).encode(encoding)
yield ('$%s\r\n'%len(value)).encode(encoding)
yield value
yield crlf
的函數被調用以這種方式
b''.join(pack_gen(args))
爲什麼它需要是字節? –
這是一個巨大的懲罰,因爲你需要先將它轉換爲字符串,然後再轉換爲字節。我沒有看到解決辦法。問題在於它是否真的有意義。這實際上是您的應用程序中的主要性能損失嗎? –
是的。它在不斷調用的函數中處於一個長循環中。 –