[Python-Dev] Re: PEP 276 Simple Iterator for ints
Kragen Sitaker
kragen at canonical.org
Tue Nov 20 06:10:39 EST 2001
"M.-A. Lemburg" <mal at lemburg.com> writes:
> Skip Montanaro wrote:
> > * it should cause no backward compatibility issues (you can't put "..."
> > in a list now, can you? NumPy?)
You can't, no.
> Here's a slightly different approach which works now (= it doesn't
> even require a PEP :-):
>
> With the new iterator support in Python, it should be
> easily possible to write a module which exposes a singleton
> infinite sequence called e.g. "integers". Then, using the slicing
> notion we already have in Python, you could write:
>
> for i in integers[0,...,10]:
> print i
I don't know what the new iterator support in Python is, but here's an
implementation of your suggested syntax in pure, backward-compatible
Python. I really don't like naming the range inclusively, but that's
pretty much what this syntax requires.
# Iterate.py
# There's a PEP on better ways of writing integer sequences. e.g. [0,
# .. 10] or [0, 2, .. 10]. This module gives you a variant of that
# syntax proposed by M.-A. Lemburg <mal at lemburg.com>.
class RangeClass:
def __getitem__(self, slice):
if type(slice) is not type((1, 2, 3)):
raise TypeError, 'Range syntax %s wrong' % slice
if len(slice) not in (3, 4) or slice[-2] is not Ellipsis:
raise TypeError, 'Range syntax %s wrong' % slice
start = slice[0]
stop = slice[-1]
if len(slice) == 3 and start <= stop: step = 1
elif len(slice) == 3 and start > stop: step = -1
else: step = slice[1] - start
stop = stop + step
return xrange(start, stop, step)
Range = RangeClass()
More information about the Python-list
mailing list