Hola a tod@s de nuevo, perdón por el retraso, ya se que hoy escribo mas tarde de lo que lo suelo hacer normalmente, pero tenía que hacer unas solicitudes en un instituto, bueno a lo que vamos, en esta ocasión, os voy a hablar sobre los generadores.
Un generador, es un tipo especial de función que en vez de devolver un sólo valor con "return", como todas las funciones, devuelve un objeto iterable, como si de una lista, tupla o diccionario se tratase.
La única diferencia a la hora de declararlas, es que en vez de usar la palabra reservada "return" usamos la palabra reservada "yield".
def generador(a, b):
while a>b:
yield b
b+=1
En este caso devuelve todos los valores de b, hasta que sea mayor que a, por lo cual si hacemos:
generador(8, 5)
Devolverá 5, 6, 7
No intentéis hacer un:
print generador(8, 5)
Es un generador y como tal no se puede imprimir, si lo intentáis no os tirará una excepción, pero sólo conseguiréis la posición de memoria donde se a guardado.
La mayor finalidad de los generadores es usarlos en un for(lo expliqué en el tutorial 4), por ejemplo:
for a in generador(8, 5):
print a
Aquí si funcionaría e imprimiría los valores, por ejemplo, en python, hay un generador por defecto llamado range() que se usa para especificar un rango de números, por ejemplo:
for a in range(0, 15):
print "esto se ejecutará 15 veces"
De esta forma conseguimos "emular" el típico for de muchos lenguajes como el de C o el de Java.
Bueno chic@s, espero que os haya gustado el tutorial de hoy, perdonad me la tardanza pero es que hoy he ido muy mal de tiempo, bueno, un abrazo y hasta el siguiente tutorial, mañana hablaré sobre como gestionar las excepciones que nos pueda tirar el interprete de python, un abrazo y hasta mañana.
7 comentarios:
¿Se usa mucho en Python esto?
Depende del programador, habrá gente que lo use mucho y gente que lo use menos, a mi personalmente me parece una construcción muy, pero que muy interesante.
He querido meter el resultado del generador, en una lista.
Para lo que he recorrido con "el for del generador" una lista
previamente definida.
¿Hay forma de definir una lista sin fijar el numero de
elementos que tendrá?
def generador(a,b):
.....while a>b:
........yield b
........b+=1
x=0
lista=[0,0,0,0,0,0]
for a in generador (8,5):
....lista[x]=a
....x+=1
Bueno como no se declarar una lista con el numero de elementos sin fijar, he hecho esta chapucilla.
http://pastebin.com/TZPr7nS5
Declaro una lista de un elemento=0
elimino el primer elemento
Y añado un nuevo elemento por cada resultado del generador. ;)
Hola Tuus.
Pues si, hay una forma de definir una lista sin darle ningún elemento previo, he visto que has hecho un:
lista=[0]
Pues no hace falta ese cero, para crear una lista vacía es suficiente con un:
lista=[]
Eso si, los corchetes si son imprescindibles para definir bien que es una lista.
¡ Saludos !
Genial! Creí haberlo probado, pero se ve que no lo había hecho.
Muchas gracias. Un saludo.
De nada Tuus, gracias a ti.
Un saludo.
Publicar un comentario