Struct class random access
castironpi at gmail.com
Tue Aug 26 01:45:19 CEST 2008
On Aug 25, 4:49 pm, castironpi <castiro... at gmail.com> wrote:
> On Aug 25, 4:25 pm, Marc 'BlackJack' Rintsch <bj_... at gmx.net> wrote:
> > On Mon, 25 Aug 2008 13:03:09 -0700, castironpi wrote:
> > > struct.Struct lets you encode Python objects into structured memory. It
> > > accepts a format string, and optionally a buffer and offset to/from
> > > which to read/write the structure. What do you think of random access
> > > for the results?
> > > (unproduced)
> > >>>> packer= struct.Struct( 'IIIf255p' )
> > >>>> packer.pack_into( buf, off, 10, 20, 30, 0.5, 'abc' )
> > >>>> packer.unpack_from( buf, off, 2 ) #reads field 2
> > > 30
> > I don't like it for the same reason I don't like index access on tuples
> > or lists that represent a "record" -- the numbers are quite meaningless.
> > Names for the components result in much easier to understand source code,
> > so I would prefer to use `ctypes` or `construct` to create such a record.
> > Ciao,
> > Marc 'BlackJack' Rintsch
> I'm interested in the speed benefit, so you don't have to reconstruct
> the entire 'record' just to read/write one 'field'. How in ctypes?
Model the constructor after 'namedtuple' type.
>>> packer= struct.Struct( 'IIIf255p', 'i1', 'i2', 'i3', 'afloat', 'name' )
>>> packer.pack_into( buf, off, 10, 20, 30, 0.5, 'abc' )
>>> packer.unpack_from( buf, off, 'i3' )
>>> packer.unpack_from( buf, off )
( 10, 20, 30, 0.5, 'abc' )
You still get marginal speed benefit in sequential access. You avoid
the construction of n-1 objects.
More information about the Python-list