1
Python的struct.unpack
返回一個元組。有沒有辦法在沒有構造中間元組的情況下一個一個地產生元素?Python:struct.unpack的生成器版本
Python的struct.unpack
返回一個元組。有沒有辦法在沒有構造中間元組的情況下一個一個地產生元素?Python:struct.unpack的生成器版本
不是。您可以使用ctypes.Structure
在您訪問它們時懶惰地創建Python對象。否則,你需要自己寫點東西。類似如下:
import struct
import re
re_split_fmt = re.compile("\s*[0-9]*\S", re.DOTALL)
def unpack_iter(fmt, buf):
if fmt == "":
return()
if fmt[0] in "<>=!":
byteorder = fmt[0]
fmt = fmt[1:]
else:
raise ValueError, "can't handle possibly padded formats"
if "p" in fmt:
raise ValueError, "can't handle pascal strings"
def generator(i, buf, offset = 0):
for m in i:
fmt = byteorder + m.group(0)
size = struct.calcsize(fmt)
if fmt[-1] != 'x':
s = buf[offset : offset + size]
for a in struct.unpack(fmt, s):
yield a
offset += size
return generator(re_split_fmt.finditer(fmt), buf)