iterador de Python

Funciones y métodos de Python




Cómo crear un iterador de Python: una guía

Los iteradores están absolutamente en todas partes en Python; Es difícil aprender incluso los conceptos básicos sin escuchar la palabra "iterador". o & ldquo; iterable & rdquo ;.

Un iterador es un objeto sobre el que se puede iterar. Si bien hay algunos objetos integrados sobre los que puede iterar, también puede definir los suyos propios.

En esta guía, vamos a hablar sobre los iteradores de Python, cómo funcionan y cómo puedes usarlos en tu código. Construiremos nuestro propio iterador para que pueda aprender sobre sus características principales en acción. El código de esta guía es compatible para las instalaciones de Python 3.x.

¡Empecemos!




¿Qué es un iterador?

Iteradores son objetos sobre los que puede iterar. Un iterador devolverá datos de ese objeto, un elemento a la vez.

Puede verificar si un objeto es iterable al intentar ejecutarlo a través de un para bucle ; si puede recorrer el objeto, significa que es iterable. Las cadenas, listas, tuplas y diccionarios son ejemplos de los tipos de datos integrados que son objetos iterables.

Un objeto iterador en Python debe tener dos métodos:

  • __iter __ () : Esto le permite recuperar un iterador.
  • __next __ () : Esto le permite obtener el siguiente valor en un iterador.

Los guiones bajos __ se utilizan en los iteradores porque denotan funciones especiales. Para definir un iterador, debe utilizar estas dos funciones especiales. Juntos, se denominan protocolo iterador. Estos métodos generalmente se pronuncian como & ldquo; iter and next methods & rdquo ;.

El 81% de los participantes afirmaron que se sentían más seguros acerca de sus perspectivas de trabajo técnico después de asistir a un bootcamp. Asigne a un bootcamp hoy mismo.

El graduado promedio de bootcamp pasó menos de seis meses en la transición de carrera, desde comenzar un bootcamp hasta encontrar su primer trabajo.

Comenzaremos con el conceptos básicos: construcción de un iterador infinito. Este es el tipo de iterador más simple. Es tan simple que seguirá funcionando para siempre. Lo arreglaremos más adelante en el tutorial.


Comencemos por definir una clase llamada Cakes, que será nuestra clase iteradora:

 class Tortas: def __init __ (self, value): self.value = value 

Hemos declarado un __init__ método que se ejecutará tan pronto como un objeto de nuestra clase sea instanciado. El método __init__ se llama constructor. En este ejemplo, nuestro método __init__ puede tome un valor: valor.

A continuación, vamos a crear nuestro protocolo de iterador:

 def __iter __ (self): return self def __next __ (self): return self.value 

El método __iter__ se usa para recuperar nuestro objeto iterador. El código __siguiente __ nos permite recuperar el siguiente valor en el objeto iterable que especificamos. & nbsp;

Asegurémonos de que nuestro código funcione hasta ahora. Lo haremos definiendo un objeto de nuestra clase como este:

 cake = Cakes ( ["Esponja de vainilla"]) 

¡Hasta ahora, todo bien! Puede que estés pensando: ¿por qué este código no hace nada? Eso es porque nuestra clase solo devuelve una función de iterador.

Tenemos que iterar sobre nuestro iterador para verificar si funciona. Podemos hacerlo usando un bucle for-in:

 para c en cake: print (c) 

Nuestro código devuelve:

 Esponja de vainilla Esponja de vainilla & hellip; 

¡La maldición del bizcocho de vainilla! Simplemente se sigue imprimiendo en la consola. ¿Qué está pasando? Acabamos de crear nuestro primer iterador. Es muy simple, pero funciona.




Prueba de iteradores usando bucles for-in en Python

Antes de hacer que nuestro iterador sea útil, tomemos un momento para revisar el concepto de un bucle for-in. En nuestro último ejemplo, escribimos un bucle for-in para probar nuestro código:

 para c en cake: print (c) 

La forma en que funciona un bucle for-in es que primero crea un iterador de un objeto usando un método __iter __ () . Un bucle for-in luego llama a __next __ () hasta que no se devuelve ningún valor.


Puede pensar en un bucle for-in como un bucle while simple. Si bien hay valores que un iterador puede devolver, un bucle for-in devolverá esos valores. & nbsp;




Creación de un iterador útil

Nuestro último iterador no es muy útil. Solo imprime el mismo valor una y otra vez. Dicho esto, sigue siendo un iterador: es capaz de leer todos los objetos en un iterable.

Vamos a crear un iterador que itera sobre un Matriz de Python . Esta matriz contiene una lista de pasteles.

Para evitar que nuestro iterador se repita infinitamente, vamos a realizar un seguimiento de cuántos valores hay dentro de nuestro iterable , y cuántas veces se ha ejecutado nuestro iterador. Esto nos permitirá detener la ejecución de nuestro iterador una vez que haya iterado a través de todos los elementos en un iterable.

Abra un nuevo archivo Python y pegue el siguiente código:

 class Tortas: def __init __ (self, value): self.value = value self.max = len (value) self.count = 0 def __iter __ (self): return self def __next __ (self): if self.count & lt; self.max: to_return = self.value [self.count] self.count + = 1 return to_return else: raise StopIteration 

Este iterador es un poco más complicado que el anterior. Es por eso que primero construimos un iterador infinito. En este iterador, hemos inicializado tres valores:

"Career Karma entró en mi vida cuando más lo necesitaba y rápidamente me ayudó a combinar con un bootcamp. Dos meses después de graduarme, encontré el trabajo de mis sueños. que se alinea con mis valores y metas en la vida! "

Venus, ingeniero de software en Rockbot

En nuestro __siguiente __ () , hemos agregado un & rdquo; if & rdquo; declaración . Esta declaración verifica si el número de veces que nuestro iterador se ha ejecutado (recuento) es menor que el número de elementos sobre los que nuestro iterable debería iterar (máx.).

Si & ldquo; contar & rdquo; es menor que & ldquo; max & rdquo ;, nuestro iterador encontrará el siguiente valor en el objeto iterable. Luego agregará 1 a nuestro & ldquo; count & rdquo; variable para que podamos realizar un seguimiento de cuántos objetos quedan para iterar. Luego, devolvemos el valor que calculamos.


Es importante tener en cuenta que asignamos un valor a la variable & ldquo; to_return & rdquo; antes de incrementar la variable & ldquo; count & rdquo; Esto asegura que podemos acceder al valor en el iteración actual de nuestro iterador.

Si hemos iterado sobre todos los elementos de nuestra lista, se generará una excepción llamada StopIteration. Esto detiene nuestro programa una vez que hemos iterado a través de todos los elementos de la lista list.

Veamos si nuestro iterador funciona. Agregue el siguiente código a su programa principal y ejecútelo:

 cake = Tartas ([" Esponja de vainilla "]) para c en tarta: print (c) 

Nuestro código devuelve:

 Esponja de vainilla 

Vamos a agregar algunos elementos más a nuestra lista un Vería qué sucede:

 cake = Cakes (["Esponja de vainilla", "Zanahoria", "Café" ]) para c en cake: print (c) 

Nuestro código devuelve:

 Bizcocho de vainilla y zanahoria 

¡Lo hemos conseguido! Hemos creado con éxito un iterador que recorre nuestra lista de pasteles. Te mereces un pastel y ndash; o incluso un cupcake & ndash; para llegar tan lejos.




Conclusión

Los iteradores le permiten crear objetos sobre los que se puede iterar. Un iterador puede recorrer una lista, una cadena u otro objeto iterable y realizar una acción en particular.

¿Estás preparado para un desafío? Cree un iterador que recorra una lista de números y devuelva cada número multiplicado por dos.

El código para este iterador será similar a nuestro ejemplo anterior & ndash; seguirá utilizando el protocolo iterador & ndash; pero debe multiplicar cada número en una lista por dos antes de que se devuelva al programa principal.

¡Ahora está listo para comenzar a escribir sus propios iteradores en Python como un experto!



iterador de Python: StackOverflow Questions