Skip to main content
 首页 » 编程设计

python之为什么解包这么慢

2025年05月04日11lautakyan007

我有一个简单的例子:

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。