range() frente a xrange() en Python

range() y xrange() son dos funciones que podrían usarse para iterar un cierto número de veces en bucles for en Python. En Python 3, no hay xrange, pero la función de rango se comporta como xrange en Python 2. Si desea escribir código que se ejecutará tanto en Python 2 como en Python 3, debe usar range().

  • range() : devuelve un objeto de rango (un tipo de iterable).
  • xrange() : esta función devuelve el objeto generador que se puede usar para mostrar números solo mediante un bucle. El único rango particular se muestra bajo demanda y, por lo tanto, se denomina » evaluación perezosa «.

Ambos se implementan de diferentes maneras y tienen diferentes características asociadas a ellos. Los puntos de comparación son: 

  • Tipo de retorno
  • Memoria
  • Operación Uso
  • Velocidad

Tipo de retorno

range() devuelve: objeto de rango
xrange() devuelve – objeto xrange()

Python

# Python code to demonstrate range() vs xrange()
# on  basis of return type
  
# 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))

Producción:

The return type of range() is : 
<type 'list'>
The return type of xrange() is : 
<type 'xrange'>

Memoria

La variable que almacena el rango creado por range() ocupa más memoria en comparación con la variable que almacena el rango usando xrange(). La razón básica de esto es que el tipo de retorno de range() es una lista y xrange() es un objeto xrange(). 

Python

# Python code to demonstrate range() vs xrange()
# on  basis of memory
  
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))

Producción: 

The size allotted using range() is : 
80064
The size allotted using xrange() is : 
40

Uso de operaciones

Como range() devuelve la lista, todas las operaciones que se pueden aplicar en la lista se pueden usar en ella. Por otro lado, como xrange() devuelve el objeto xrange, las operaciones asociadas a la lista no se pueden aplicar sobre ellos, por lo que es una desventaja.

Python

# Python code to demonstrate range() vs xrange()
# on  basis of operations usage 
  
# 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])

Error: 

Traceback (most recent call last):
  File "1f2d94c59aea6aed795b05a19e44474d.py", line 18, in 
    print (x[2:5])
TypeError: sequence index must be integer, not 'slice'

Producción: 

The list after slicing using range is : 
[3, 4, 5]
The list after slicing using xrange is : 

Velocidad

Debido al hecho de que xrange() evalúa solo el objeto generador que contiene solo los valores requeridos por la evaluación diferida, por lo tanto, es más rápido en la implementación que range().

Puntos importantes: 

  • Si desea escribir código que se ejecutará tanto en Python 2 como en Python 3, use range() ya que la función xrange está obsoleta en Python 3.
  • range() es más rápido si itera sobre la misma secuencia varias veces.
  • xrange() tiene que reconstruir el objeto entero cada vez, pero range() tendrá objetos enteros reales. (Sin embargo, siempre funcionará peor en términos de memoria)
range() rangox()
Devuelve una lista de enteros. Devuelve un objeto generador.
La velocidad de ejecución es más lenta. La velocidad de ejecución es más rápida.
Toma más memoria ya que mantiene la lista completa de elementos en la memoria. Toma menos memoria ya que mantiene solo un elemento a la vez en la memoria.
Todas las operaciones aritméticas se pueden realizar ya que devuelve una lista. Tales operaciones no se pueden realizar en xrange().
En python 3, xrange() no es compatible. En python 2, xrange() se usa para iterar en bucles for.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *