NameError: el nombre 'xrange' no está definido en Python

Salman Mehmood 15 febrero 2024
NameError: el nombre 'xrange' no está definido en Python

Aprenderemos por qué obtenemos un error cuando llamamos a la función xrange() en Python3 y veremos cómo podemos solucionar este problema. También aprenderemos la diferencia entre range() y xrange() y veremos cómo usar la función range() en diferentes versiones de Python.

NameError: el nombre 'xrange' no está definido al usar la función xrange() Python3

Es posible que sepa que una gran parte de la transición de Python2 a Python3 es que la función xrange() ya no existe en Python3. Usaremos Python2 y Python3 uno al lado del otro y los compararemos y veremos las diferencias entre range() y xrange() en ambas versiones de Python.

Primero, usaremos un entorno Python2 donde podemos usar la función xrange(), pero el entorno Python2 también tiene la función range(). Veremos que estas funciones se comportan de forma ligeramente diferente; xrange() devuelve un objeto xrange() y range() devuelve una lista.

Python2 Usar xrange y range - Salida

En Python3, la función rango() devuelve un objeto rango(), mientras que en Python2, la función rango() devuelve una lista. Básicamente, xrange() es un generador, y range() también es un generador en Python3.

Rango de uso de Python3 - Salida

Centrémonos ahora en Python2. Primero queremos examinar un poco este objeto xrange().

Veremos qué tipo tiene y si tenemos un objeto xrange.

type(xrange(6))

Producción

<type 'xrange'>

A continuación, veremos qué sucede si lo envolvemos en una lista.

list(xrange(6))

Producción

[0, 1, 2, 3, 4, 5]

Ahora, asignaremos xrange(6) a una variable llamada a, crearemos un objeto range() y lo asignaremos a la variable b. Importaremos sys para obtener el tamaño de a y b.

Cuando ejecutamos este código en el shell de Python, deberíamos notar una gran diferencia entre los tamaños de ambas variables.

>>> import sys
>>> a=xrange(6)
>>> b=range(6)
>>> sys.getsizeof(a)
32
>>> sys.getsizeof(b)
112

El objeto xrange() tiene un tamaño más pequeño que range(), por eso xrange() es más rápido que range().

Debido a una ejecución más rápida, los principiantes generalmente intentan usar la función xrange() en Python3 y obtienen un error (el nombre 'xrange' no está definido) porque Python3 no es compatible con la función xrange().

# in python 3
xrange(6)

Producción :

NameError: name 'xrange' is not defined

En Python3, el objeto xrange() se convirtió en el objeto range().

# in python 3
>>> range(6)
range(0, 6)

Importemos sys para ver los tamaños de la lista y los objetos range() en Python3.

# in python 3
>>> a=range(6)
>>> b=[0,1,2,3,4,5]
>>> import sys
>>> sys.getsizeof(a)
48
>>> sys.getsizeof(b)
152

Obtuvimos 48, que es mucho más comparable con la lista. Puede ver que xrange() de Python2 y range() de Python3 probablemente se ejecutarían a una velocidad similar y ocuparían una cantidad similar de espacio en la memoria.

En el entorno de Python3 no podemos utilizar la función xrange() ya que, como decíamos, xrange() ya no existe; nunca se convirtió en Python3. Podemos usar la función range() en lugar de xrange() porque la función range() es mucho más rápida en Python3.

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

Artículo relacionado - Python Error