[Tutor] Array indexing
Danny Yoo
dyoo at hkn.eecs.berkeley.edu
Tue Jan 16 18:29:03 CET 2007
> While trying to implement a PE parser, I ran into the following problem:
>
> #************** START CODE*******************
> data = file.read(128);
> directoryTable = struct.unpack('LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL', data);
> i=0;
> print "Export table 0x%08X + 0x%08x" % (directoryTable[i+=1],
> directoryTable[i+=1]);
> print "Import table 0x%08X + 0x%08x" % (directoryTable[i+=1],
> directoryTable[i+=1]);
> #************** END CODE*******************
>
> This code throws a syntax error at the first i+=1 on "line 4".
Hi Joe,
Yes. Python's assignments aren't expressions --- in Python, assignments
are meant to visually stand out. Unfortunately, this means you can't put
the assignment within the array indexing expression.
There are a few workarounds. One is to treat the directoryTable as a
stream of values that we can iterate across. For example:
##################################
>>> values = (3, 1, 4, 1, 5)
>>> i = iter(values)
>>> i
<tupleiterator object at 0x6dd50>
##################################
'i' here is an "iterator" that we can repeatedly use to get sequential
elements:
#############
>>> i.next()
3
>>> i.next()
1
>>> i.next()
4
#############
In some sense, this should allow you to do what you had in your original
code, since i.next() will both give you the value and, internally, move
the iterator forward.
See:
http://www.python.org/doc/tut/node11.html#SECTION0011900000000000000000
for a quick-and-dirty introduction to iterators.
Best of wishes!
More information about the Tutor
mailing list