Quizás haya sido víctima de información errónea en la web, pero creo que es más probable que haya entendido mal algo. Según lo que he aprendido hasta ahora, range () es un generador, y los generadores se pueden usar como iteradores. Sin embargo, este código:
myrange = range(10)
print(next(myrange))
me da este error:
TypeError: 'range' object is not an iterator
¿Que me estoy perdiendo aqui? Esperaba que esto imprimiera 0 y avanzara al siguiente valor en myrange. Soy nuevo en Python, así que acepte mis disculpas por la pregunta bastante básica, pero no pude encontrar una buena explicación en ningún otro lugar.

forbucle.iterse pueden usar para obtener un iterador. Los iteradores son objetos que se pueden iterar mediante el uso denext. Generadores es una categoría de iteradores (funciones generadoras y expresiones generadoras). Al menos eso es lo que creo ...Respuestas:
rangees una clase de objetos iterables inmutables. Su comportamiento de iteración se puede comparar conlists: no se puede llamarnextdirectamente a ellos; tienes que obtener un iterador usandoiter.Entonces no,
rangeno es un generador.Puede estar pensando, "¿por qué no lo hicieron directamente iterable"? Bueno, los
ranges tienen algunas propiedades útiles que no serían posibles de esa manera:start,stopy losstepatributos (desde Python 3.3),countyindexlos métodos y apoyanin,leny__getitem__las operaciones.rangevarias veces.>>> myrange = range(1, 21, 2) >>> myrange.start 1 >>> myrange.step 2 >>> myrange.index(17) 8 >>> myrange.index(18) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: 18 is not in range >>> it = iter(myrange) >>> it <range_iterator object at 0x7f504a9be960> >>> next(it) 1 >>> next(it) 3 >>> next(it) 5fuente
range__contains__5 in range(10) => Truerangees vago (en comparación con Python 2, donde es solo una función que devuelve una lista).range(0,10,3)[3]y9 in range(0,10,3). El rango es una lista bastante perezosa.