Я знаком с разницей между range()
и xrange()
. Я заметил что-то странное с xrange()
:странное поведение xrange() в Python 2
>>> xrange(1,10,2)
xrange(1, 11, 2)
>>> xrange(1,10,4)
xrange(1, 13, 4)
Функционально, это правильно:
>>> for item in xrange(1,10,4):
... print item
...
1
5
9
>>>
Однако, как вы можете видеть, значение останова в возвращаемом xrange
объекта следующего более высокого значения после последнего юридическое значение. Почему?
range()
который теперь обеспечивает те же функциональные возможности в Python 3, как xrange
в Python 2 ведет себя, как ожидалось:
>>> range(1,10,4)
range(1, 10, 4)
>>> range(1,10,2)
range(1, 10, 2)
>>>
Нет, 'xrange()' это не то же самое, как 'диапазона()' в Python 3. Последнее новое тип. Конечное значение * никогда * не включено ни в 'range()', ни 'xrange()'. Из-за вашего значения 'step' ни один, ни' 11', ни '10' в любом случае не включены в выходной диапазон. –
@MartijnPieters Я согласен с вашей первой половиной комментария. Отредактировал мой вопрос. – 2013-03-14 12:53:14
@MartijnPieters Теперь, когда значение стоп никогда не включалось, да, я это знаю. Почему объект xrange возвращается с остаточным значением в качестве последнего юридического значения + шаг? – 2013-03-14 12:54:21