Customize the effect of enumerate()?

Steve Holden steve at
Mon Oct 23 03:02:51 CEST 2006

Simon Forman wrote:
> Dustan wrote:
>>Can I make enumerate(myObject) act differently?
>>class A(object):
>>	def __getitem__(self, item):
>>		if item > 0:
>>	            return self.sequence[item-1]
>>	        elif item < 0:
>>	            return self.sequence[item]
>>	        elif item == 0:
>>	            raise IndexError, "Index 0 is not valid."
>>	        else:
>>	            raise IndexError, "Invalid Index."
>>	def __iter__(self): return iter(self.sequence)
> That final else clause is a little funny...    What kind of indices are
> you expecting that will be neither less than zero, greater than zero,
> or equal to zero?
Good defensive programming albeit of a somewhat extreme nature. Should 
one of the tests be removed at a later date the else clause will trap 
occurrences of the no-longer handled case.

>>Why the funny behavior, you ask? For my class A, it doesn't make sense
>>to number everything the standard programming way. Of course, if
>>someone uses enumerate, it's going to number the items the same way as
>>ever. Is there any way to modify that behavior, any special function to
>>set? There doesn't appear to be, according to the docs, but it never
>>hurts to make sure.
> You can write your own enumerate function and then bind that to the
> name 'enumerate'.
Yes, but if you do you had better make sure that it gives the standard 
behavior for normal uses.

Steve Holden       +44 150 684 7255  +1 800 494 3119
Holden Web LLC/Ltd
Skype: holdenweb
Recent Ramblings

More information about the Python-list mailing list