Customize the effect of enumerate()?
Steve Holden
steve at holdenweb.com
Sun Oct 22 21:02:51 EDT 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.
regards
Steve
--
Steve Holden +44 150 684 7255 +1 800 494 3119
Holden Web LLC/Ltd http://www.holdenweb.com
Skype: holdenweb http://holdenweb.blogspot.com
Recent Ramblings http://del.icio.us/steve.holden
More information about the Python-list
mailing list