On Aug 17, 3:53 am, Mark Dickinson <dicki...@gmail.com> wrote: > On Aug 16, 8:36 pm, Mark Dickinson <dicki...@gmail.com> wrote: > > > > > > > On Aug 16, 8:08 pm, Jacky <jacky.chao.w...@gmail.com> wrote: > > > My concern is that struct may need to parse the format string, > > > construct the list, and de-reference index=0 for this generated list > > > to get the int out. > > > > There should be some way more efficient? > > > Well, you can improve on the struct solution by using the > > struct.Struct class to avoid parsing the format string repeatedly: > > > >>> import struct > > >>> S = struct.Struct('<I') > > >>> S.unpack_from(buffer(bytearray([1,2,3,4,5]))) > > > (67305985,) > > > This doesn't make a huge difference on my machine (OS X 10.6.4, 64-bit > > build of Python 2.6) though; it's probably more effective for long > > format strings. > > Sorry, this was inaccurate: this makes almost *no* significant > difference on my machine for large test runs (10000 and up). For > small ones, though, it's faster. The reason is that the struct module > caches (up to 100, in the current implementation) previously used > format strings, so with your tests you're only ever parsing the format > string once anyway. Internally, the struct module converts that > format string to a Struct object, and squirrels that Struct object > away into its cache, which is implemented as a dict from format > strings to Struct objects. So the next time that the format string is > used it's simply looked up in the cache, and the Struct object > retrieved. > > By the way, in Python 3.2 there's yet another fun way to do this, > using int.from_bytes. > > >>> int.from_bytes(bytearray([1,2,3,4]), 'little')
Thanks! It looks pretty like the ctypes way. ;) > > 67305985 > > -- > Mark- Hide quoted text - > > - Show quoted text - -- http://mail.python.org/mailman/listinfo/python-list