Les fonctions range() et xrange() sont deux fonctions qui pourraient être utilisées pour itérer un certain nombre de fois dans pour boucles en Python. Dans Python3 , il n'y a pas de xrange, mais la fonction range se comporte comme xrange en Python2. Si vous souhaitez écrire du code qui s'exécutera à la fois sur Python2 et Python3, vous devez utiliser range(). Les deux sont mis en œuvre de différentes manières et sont associés à des caractéristiques différentes. Les points de comparaison sont :
- Type de retour
- Mémoire
- Utilisation de l'opération
- Vitesse
Fonction Python range()
Le Fonction Python range() renvoie une séquence de nombres, dans une plage donnée. L'utilisation la plus courante consiste à itérer des séquences sur une séquence de nombres à l'aide de boucles Python.
Fonction Python xrange()
La fonction xrange() en Python est utilisée pour générer une séquence de nombres, similaire à la fonction Python range(). La fonction Python xrange() est utilisée uniquement dans Python 2.x tandis que la fonction range() en Python est utilisée dans Python 3.x.
Type de retour dans range() vs xrange()
Ce plagex() la fonction renvoie le objet générateur qui peut être utilisé pour afficher des nombres uniquement en boucle. La seule plage particulière est affichée à la demande et est donc appelée évaluation paresseuse , alors que dans Python, la fonction range() renvoie un objet range (un type d'itérable).
Python3
# initializing a with range()> a>=> range>(>1>,>10000>)> # initializing a with xrange()> x>=> xrange>(>1>,>10000>)> # testing the type of a> print>(>'The return type of range() is : '>)> print>(>type>(a))> # testing the type of x> print>(>'The return type of xrange() is : '>)> print>(>type>(x))> |
>
qu'est-ce que mon espace
>
Sortir:
The return type of range() is : The return type of xrange() is :>
Vitesse des fonctions xrange() et range()
La variable stockant le gamme créé par range() prend plus de mémoire par rapport à la variable stockant la plage en utilisant xrange(). La raison fondamentale en est que le type de retour de range() est une liste et xrange() est un objet xrange().
Python3
import> sys> # initializing a with range()> a>=> range>(>1>,>10000>)> # initializing a with xrange()> x>=> xrange>(>1>,>10000>)> # testing the size of a> # range() takes more memory> print> (>'The size allotted using range() is : '>)> print> (sys.getsizeof(a))> # testing the size of x> # xrange() takes less memory> print> (>'The size allotted using xrange() is : '>)> print> (sys.getsizeof(x))> |
clause SQL
>
>
Sortir:
The size allotted using range() is : 80064 The size allotted using xrange() is : 40>
Opérations Utilisation des fonctions xrange() et range()
Un range() renvoie la liste, toutes les opérations qui peut être appliqué sur la liste peut être utilisé dessus. D'un autre côté, comme xrange() renvoie l'objet xrange, les opérations associées à la liste ne peut pas leur être appliqué, d'où un inconvénient.
Python3
# initializing a with range()> a>=> range>(>1>,>6>)> # initializing a with xrange()> x>=> xrange>(>1>,>6>)> # testing usage of slice operation on range()> # prints without error> print> (>'The list after slicing using range is : '>)> print> (a[>2>:>5>])> # testing usage of slice operation on xrange()> # raises error> print> (>'The list after slicing using xrange is : '>)> print> (x[>2>:>5>])> |
>
>
Erreur:
Traceback (most recent call last): File '1f2d94c59aea6aed795b05a19e44474d.py', line 18, in print (x[2:5]) TypeError: sequence index must be integer, not 'slice'>
Sortir:
The list after slicing using range is : [3, 4, 5] The list after slicing using xrange is :>
Différence entre range() et xrange() en Python
Étant donné que xrange() évalue uniquement l'objet générateur contenant uniquement les valeurs requises par l'évaluation paresseuse, il est donc plus rapide en implémentation que range().
Les points importants:
héritage en Java
- Si vous souhaitez écrire du code qui s'exécutera à la fois sur Python 2 et Python 3, utilisez range() car la fonction xrange est obsolète dans Python 3.
- range() est plus rapide si vous parcourez plusieurs fois la même séquence.
- xrange() doit reconstruire l'objet entier à chaque fois, mais range() aura de vrais objets entiers. (Cependant, cela fonctionnera toujours moins bien en termes de mémoire)
| gamme() | plagex() |
|---|---|
| Renvoie une liste d'entiers. | Renvoie un objet générateur. |
| La vitesse d'exécution est plus lente | La vitesse d'exécution est plus rapide. |
| Prend plus de mémoire car il conserve la liste complète des éléments en mémoire. | Prend moins de mémoire car il ne conserve qu'un seul élément à la fois en mémoire. |
| Toutes les opérations arithmétiques peuvent être effectuées car il renvoie une liste. | De telles opérations ne peuvent pas être effectuées sur xrange(). |
| En python 3, xrange() n'est pas pris en charge. | En python 2, xrange() est utilisé pour parcourir les boucles for. |