Vamos a discutir sobre el iterador de Python en este artículo. Iterador es un objeto con estado y recuerda dónde está y cuándo está iterando. Devuelve el objeto único. Utiliza los métodos iter () y Next (). Esto se usa para formar los bucles, comprensiones y generadores de pitón.
Convierta cualquier secuencia al iterador utilizando la siguiente sintaxis:
iter (secuencia)Para acceder al siguiente elemento, se usa la función siguiente (). Cualquier objeto en Python que admite los dos métodos anteriores se llama iterador. Para verificar esto, ejecute el método incorporado dir () en el objeto.
Ejemplo: imprimir (dir (lista))
Aquí, la lista no es un iterador, ya que no tiene el método "__next__".
Si intentamos acceder a los próximos elementos, obtenemos la excepción de la siguiente manera:
Para convertirlo como iterador, pase la lista al método ITER como se muestra en el siguiente. Después de eso, vemos el método "__next__".
Diferencia entre iterador y iterable
Iterable significa que podemos recurrir a los valores como List, Tuple, String, etc. Todos los objetos tienen un método iter () que se utiliza para obtener un iterador. Veremos algunos ejemplos para entenderlo mejor:
Ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dieciséis 17 | nums = [1,2,3,4,5] numSiterator = iter (nums) #same como numSiterator = nums.__iter __ () # Internamente llamará al método __iter__ dunder imprimir (siguiente (numSiterator)) # Access 1st Element imprimir (siguiente (numSiterator)) # Access 2do elemento Imprimir (Next (NumSiterator)) # Access 3er elemento y así sucesivamente .. Imprimir (Siguiente (NumSiterator)) Imprimir (Siguiente (NumSiterator)) Imprimir (Siguiente (NumSiterator)) |
Cuando llegamos al final de la lista, plantea un error de stopiteration.
Nota: Cualquier cosa que comience con el doble bajo y termina con el doble bajo en Python se llama Dunder Method.
Caso de uso de los iteradores
Ejemplo 1:
Imprimimos cada personaje usando el bucle for For.
1 2 3 4 5 | S = "Buenos días" para char en s: Imprimir (Char) |
Ejemplo 2:
Imprimimos la misma cadena usando los iteradores.
1 2 3 4 5 6 7 8 9 10 11 | S = "Buenos días" palabra = iter (s) Mientras que es cierto: intentar: Artículo = Siguiente (palabra) Imprimir (Artículo) Excepto la paro: romper |
Ejemplo 3:
Para construir nuestra propia función de rango, la función de rango proporciona el rango de valores de principio a fin (exclusivo).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dieciséis 17 18 19 20 21 22 23 24 25 26 27 | Myrange de clase: def __init __ (self, comenzar, parar): ser.val = inicio ser.parar = parar def __iter __ (self): volver a ser def __next __ (self): Si uno mismo.val> = yo.detener: elevar la stopiteration actual = yo.Val ser.Val += 1 retorno corriente Nums = MyRange (1,5) Imprimir (Siguiente (NUMS)) Imprimir (Siguiente (NUMS)) Imprimir (Siguiente (NUMS)) Imprimir (Siguiente (NUMS)) Imprimir (Siguiente (NUMS)) |
Escribimos la función de rango anterior usando el generador.
Ejemplo 4:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dieciséis | def my_range (inicio, final): actual = inicio Mientras que actual < end: rendimiento de corriente corriente += 1 nums = my_range (1,5) Imprimir (Siguiente (NUMS)) Imprimir (Siguiente (NUMS)) Imprimir (Siguiente (NUMS)) Imprimir (Siguiente (NUMS)) |
O podemos llamar a lo siguiente que produce la misma salida que el ejemplo anterior.
1 2 3 | Para NUM en NUMS: Imprimir (NUM) |
Conclusión
El iterador no necesita terminar mientras el valor esté allí; nos mantiene obteniendo el valor. Obtiene un valor a la vez. Es realmente útil al escribir los programas de memoria eficiente en la memoria donde tenemos muchos valores que no podemos poner en la memoria si los ponemos en una lista o tupla. Podemos guardar el recurso con este.