On 9/25/2010 10:24 AM Terry Reedy said...
On 9/25/2010 4:22 AM, Yingjie Lan wrote:
I noticed that in python3k, multiplying a sequence by a negative
integer is the same as multiplying it by 0, and the result is an
empty sequence.

This is explicitly documented: "Values of n less than 0 are treated as 0
(which yields an empty sequence of the same type as s).) I would have
made this raise a ValueError, but someone must have had a use case for
getting an empty sequence.

At least it's consistent with slicing not generating a ValueError ala

ActivePython 2.6.1.1 (ActiveState Software Inc.)
based on Python 2.6.1 (r261:67515, Dec  5 2008, 13:58:38)
[MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> ham = range(10)
>>> ham[11:21]
[]


... which in version 3 behaves differently?

ActivePython 3.1.2.3 (ActiveState Software Inc.)
based on Python 3.1.2 (r312:79147, Mar 22 2010, 12:20:29)
[MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> ham = range(10)
>>> ham[11:21]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence index must be integer, not 'slice'
>>>


Oh wait -- it's a range thing...

>>> ham[1:3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence index must be integer, not 'slice'
>>> ham
range(0, 10)
>>> type(ham)
<class 'range'>
>>> ham = list(range(10))
>>> ham[11:21]
[]
>>>


Well, that's annoying, but it is what xrange did and the docs do say range 3.0 is the old xrange 2.x and that the old range 2.x I've deployed.


Stutter-stepping-to-3.x-ly yrs,

Emile







--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to