Je suis familier avec la différence entre range()
et xrange()
. J'ai remarqué quelque chose de bizarre avec xrange()
:étrange comportement xrange() en Python 2
>>> xrange(1,10,2)
xrange(1, 11, 2)
>>> xrange(1,10,4)
xrange(1, 13, 4)
Fonctionnellement, il est correct:
>>> for item in xrange(1,10,4):
... print item
...
1
5
9
>>>
Cependant, comme vous pouvez le voir, la valeur d'arrêt dans l'objet xrange
retourné est la valeur supérieure suivante après la dernière valeur légale. Une raison pour laquelle?
range()
qui fournit désormais les mêmes fonctionnalités en Python 3 comme xrange
en Python 2 se comporte comme prévu:
>>> range(1,10,4)
range(1, 10, 4)
>>> range(1,10,2)
range(1, 10, 2)
>>>
Non, 'xrange()' est pas la même que 'range()' en python 3. Ce dernier est une nouvelle type. La valeur de fin est * never * incluse dans 'range()' ou 'xrange()'. En raison de votre valeur 'step', ni' 11' ni '10' ne sont inclus dans la sortie de la plage. –
@MartijnPieters Je suis d'accord avec votre première moitié du commentaire. Edited ma question. –
@MartijnPieters Maintenant, en ce qui concerne la valeur d'arrêt jamais inclus, oui je le sais. Pourquoi l'objet xrange est-il renvoyé avec une valeur d'arrêt comme dernière valeur légale + étape? –