itertools.count(-3)
Carl Banks
pavlovevidence at gmail.com
Thu Sep 21 11:29:11 EDT 2006
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.
Carl Banks
More information about the Python-list
mailing list