PEP 322: Reverse Iteration (REVISED, please comment)
Peter Otten
__peter__ at web.de
Wed Oct 29 14:33:33 EST 2003
Raymond Hettinger wrote:
>> Since iter() constructs and returns a type 'iterator' object, I
>> expected that it might be a type object, just like int(), etc. If it
>> were turned into one, like int(), etc, have been, then
> . . .
>> Unless there is a good reason to not make iter a type object, then
>> making it so could be part of the suggested implementation of the PEP.
>
> iter() is a factory function that can return all kinds of things:
>
>>>> from random import random
>>>> iters = iter('str'), iter(['list']), iter(dict(a=1)), iter(random,
>>>> None) map(type, iters)
> [<type 'iterator'>, <type 'listiterator'>, <type 'dictionary-iterator'>,
> [<type
> 'callable-iterator'>]
So why couldn't all these iterators inherit from iter just as unicode and
str do from basestring?
> Let's see if we can get back to the merits of the pep.
I respect that you want to keep this discussion focused, and itertools is my
favourite new package - but sometimes il faut reculer pour mieux sauter :-)
> Looking at your own code, can you verify that ireverse()
> is an improvement over what you have now.
While I'm zipping and enumerating all the time, reversing is rare, so I'm
not desperately awaiting this builtin.
The most common usecase seems iteration over a sequence that is mutated in
the process:
class mutate(object):
def __init__(self, alist):
self.index = -1
self.alist = alist
def next(self):
self.index += 1
try:
self.alist[self.index]
except IndexError:
raise StopIteration
return self
def value(self):
return self.alist[self.index]
def __iter__(self):
return self
def delete(self):
del self.alist[self.index]
self.index -= 1
sample = range(10)
for item in mutate(sample):
if item.value() in [3,5,7]:
item.delete()
print sample
I'm sure that the above approach can be improved (in particular, it must not
rely on an index, i. e. random access) as I'm sure that it makes the
coder's intention clearer than the "reverse to enable deletion" idiom.
Peter
More information about the Python-list
mailing list