From abf093bce24374f1c3741e358566f534fb5f4d5f Mon Sep 17 00:00:00 2001 From: Robert Smallshire Date: Wed, 6 May 2015 10:38:32 +0200 Subject: [PATCH] Achieves another 30% increase in trace header reading performance. --- segpy/packer.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/segpy/packer.py b/segpy/packer.py index e0bbd93..b266470 100644 --- a/segpy/packer.py +++ b/segpy/packer.py @@ -123,6 +123,8 @@ class HeaderPacker: header_format_class.LENGTH_IN_BYTES, endian) self._struct = Struct(self._format) + self._one_to_one = all(len(fields) == 1 for fields in self._field_name_allocations) + pass @property def header_format_class(self): @@ -151,11 +153,14 @@ class HeaderPacker: """ values = self._struct.unpack(buffer) - kwargs = {name: value - for names, value in zip(self._field_name_allocations, values) - for name in names} + if self._one_to_one: + return self._header_format_class(*values) + else: + kwargs = {name: value + for names, value in zip(self._field_name_allocations, values) + for name in names} - return self._header_format_class(**kwargs) + return self._header_format_class(**kwargs) def __repr__(self): return "{}({})".format(