我有一个简单的例子:
def __init__(self,string):
self.string = string
def UI32(self):
tmp = self.string[:4]
self.string = self.string[4:]
return unpack(">I",tmp)[0]
data = file.read()
U = UI(data)
for i in range(60000):
test = UI32()
总时间:22 秒!
请您参考如下方法:
首先,我无法在我的系统(Intel Nehalem、64 位 Ubuntu、Python 2.6.5)上重现 22s。
以下代码耗时 1.4s(这实际上是您的代码,其中一些空白由我填写):
import struct
class UI(object):
def __init__(self,string):
self.string = string
def UI32(self):
tmp = self.string[:4]
self.string = self.string[4:]
return struct.unpack(">I",tmp)[0]
U = UI('0' * 240000)
for i in range(60000):
test = U.UI32()
现在,这里有几个明显的低效问题,尤其是围绕 self.string。
我已经像这样重写了你的代码:
import struct
class UI(object):
def __init__(self,string):
fmt = '>%dI' % (len(string) / 4)
self.ints = struct.unpack(fmt, string)
def __iter__(self):
return iter(self.ints)
U = UI('0' * 240000)
count = 0
for test in U:
count += 1
print count
在同一台机器上,现在需要 0.025s。
