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.
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.
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.
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.
LinkedInArtículo relacionado - Python Error
- Administrar fallas de segmentación en Python
- Archivo <Stdin>, Línea 1, en <Módulo> Error en Python
- Arreglar AttributeError: el objeto 'generador' no tiene atributo 'siguiente' en Python
- Arreglar el comando cl.exe falló: no existe tal archivo o directorio en Windows
- Arreglar NameError: la variable no está definida en Python
- Arreglar Socket.Gaierror: [Errno 8] Nodename ni Servname proporcionado, o desconocido en Python