itertools.count(-3)

Jack Diederich jackdied at jackdied.com
Thu Sep 21 13:09:54 EDT 2006


On Thu, Sep 21, 2006 at 08:29:11AM -0700, Carl Banks wrote:
> 
> bearophileH... at lycos.com wrote:
> > itertools.count docs say:
> > Does not currently support python long integers.
> > Note, count() does not check for overflow and will return negative
> > numbers after exceeding sys.maxint. This behavior may change in the
> > future.
> >
> > But it seems it doesn't support negative numbers too:
> >
> > >>> from itertools import count, islice
> > >>> list(islice(count(), 0, 5))
> > [0, 1, 2, 3, 4]
> > >>> list(islice(count(10), 0, 5))
> > [10, 11, 12, 13, 14]
> > >>> list(islice(count(-3), 0, 5))
> > [4294967293L, 4294967294L, 4294967295L, 0, 1]
> > >>> def count2(n=0):
> > ...     while True:
> > ...         yield n
> > ...         n += 1
> > ...
> > >>> list(islice(count2(-3), 0, 5))
> > [-3, -2, -1, 0, 1]
> >
> > If this isn't a bug, then maybe docs can tell about this too.
> 
> Seems like a regression to me.  itertools was documented as taking a
> sequence of integers, not necessarily positive integers.  It worked on
> Python 2.4.
> 
> Looking at the source (from 2.5 rc2), it looks like they accidentally
> used PyInt_FromSize_t rather than PyInt_FromSSize_t in the count
> iterator.  size_t is unsigned, of course, hence the large negative
> numbers.
> 

Nuts, that was me.  I'll fix and add some tests.

-Jack



More information about the Python-list mailing list