Esto si que no lo entiendo así explicado. Debo investigar en otro lado.
Básicos del Lenguaje
Guía de instalación y conceptos básicos
Archivos y slides del curso práctico de Python
IMPORTANTE: Instalando Ubuntu Bash en Windows para facilitarte el seguimiento del curso desde Windows.
¿Qué es la programación?
¿Por qué programar con Python?
Operadores matemáticos
Variables y expresiones
Presentación del proyecto
Funciones
Usando funciones en nuestro proyecto
Operadores lógicos
Estructuras condicionales
Uso de strings y ciclos
Strings en Python
Operaciones con Strings en Python
Operaciones con strings y el comando Update
Operaciones con strings y el comando Delete
Operaciones con strings: Slices en python
For loops
While loops
Iterators and generators
Estructuras de Datos
Uso de listas
Operaciones con listas
Agregando listas a nuestro proyecto
Diccionarios
Agregando diccionarios a nuestro proyecto
Tuplas y conjuntos
Tuplas y conjuntos en código
Introducción al módulo collections
Python comprehensions
Búsquedas binarias
Continuando con las Búsquedas Binarias
Manipulación de archivos en Python 3
Uso de objetos y módulos
Decoradores
Decoradores en Python
¿Qué es la programación orientada a objetos?
Programación orientada a objetos en Python
Scopes and namespaces
Introducción a Click
Definición a la API pública
Clients
Servicios: Lógica de negocio de nuestra aplicación
Interface de create: Comunicación entre servicios y el cliente
Actualización de cliente
Interface de actualización
Manejo de errores y jerarquía de errores en Python
Context managers
Python en el mundo real
Aplicaciones de Python en el mundo real
Conclusiones finales
Python 2 vs 3 (Conclusiones)
Clases bonus
Entorno Virtual en Python y su importancia: Python en el mundo real
Aunque no lo sepas, probablemente ya utilices iterators en tu vida diaria como programador de Python. Un iterator es simplemente un objeto que cumple con los requisitos del Iteration Protocol (protocolo de iteración) y por lo tanto puede ser utilizado en ciclos. Por ejemplo,
...
Regístrate o inicia sesión para leer el resto del contenido.
Aportes 40
Preguntas 2
Esto si que no lo entiendo así explicado. Debo investigar en otro lado.
En el curso profesional de javascript explican muy bien que son los generadores.
https://platzi.com/clases/1642-javascript-profesional/22173-generato-2/
Hola dejo mi aporte. espero que sea un poco mas legible y les sirva de ayuda.
#
def fibonacci(max):
#max = max
print(max)
print('')
a, b = 0, 1
while a < max:
yield a
print(a)#el valor de retorno
a, b = b, a+b
fib1 = fibonacci(20)
fib_nums = [num for num in fib1]
print(fib_nums)#se muestra la lista generada
print('*'.center(50,'*'))
double_fib_nums = [num * 2 for num in fib1] # no va a funcionar(no se muestra los valores de fib1), ya que fib1 se utilizo arriba
print(double_fib_nums)#se muestra una lista vacia por que ya no exiten los valores de fib1
double_fib_nums = [num * 2 for num in fibonacci(30)] # sí funciona, ya que se vulve a llamar a fibonacci(x), un un leve cambio que n se multiplicara x 2
print(double_fib_nums)#se muestran los valores recien generados #
print('')
print('Ejemplos extra'.center(50,'-'))
##ejemplos
# define a list
lista = [4, 7, 0, 3]
# get an iterator using iter()
mi_iterador = iter(lista)#establecemos el objeto iterador
## iterate through it using next()
#prints 4
print(next(mi_iterador))#muestra el siguiente elemento de la lista
#prints 7
print(next(mi_iterador))#muestra el siguiente elemento de la lista
## next(obj) is same as obj.__next__()
#prints 0
print(mi_iterador.__next__())#muestra el siguiente elemento de la lista
#prints 3
print(mi_iterador.__next__())#muestra el siguiente elemento de la lista
## This will raise error, no items left
next(mi_iterador)#muestra error xq ya no hay elementos a mostrar
Iterator: Un objeto tipo iterator es un objeto que representa un flujo de datos, el cual puede ser recorrido en un proceso iterativo, como un bucle for, dentro de una función map o filter, en la creación de una list comprehension o generador, o en una comparación in.
Todo objeto iterator contiene implementado un método next() que es llamado en cada iteración devolviendo los sucesivos elementos del flujo de datos cada vez. El flujo de datos del objeto no tiene por qué estar guardado en memoria, sino que puede ser generado en tiempo real en cada iteración.
El objeto iterator guarda un estado interno para saber cuál fue el último elemento obtenido. Así, en la siguiente llamada a next(), se obtendrá el siguiente elemento correcto.
Cuando ya no quedan más elementos en el flujo de datos del iterator, la función next() lanza StopIteration. El estado interno no se reinicia automáticamente al llegar al final del flujo o al empezar a recorrerlo de nuevo. Es decir, sólo se puede recorrer una vez.
Además, tiene implementado el método iter() que devuelve el propio objeto iterator. Esto es necesario para poder implementar bucles con objetos iterator, como explicaremos después.
el codigo con algunos print para ver el funcionamiento
def fibonacci(max):
print(max)
a, b = 0, 1
while a < max:
yield a
a, b = b, a+b
if __name__ == '__main__':
print("inicio")
fib1 = fibonacci(20)
fib_nums = [num for num in fib1]
print(fib_nums)
double_fib_nums = [num * 2 for num in fib1] # no va a funcionar
print(double_fib_nums)
double_fib_nums = [num * 2 for num in fibonacci(30)] # sí funciona
print(double_fib_nums)
print("fin")
Wooow, al analizar los ejemplos, hice esta comprobación:
>>>type(fib1)
<class 'generator'>
Interesante!!!
Hola, el codigo que aparece en el texto:
def fibonacci(max):
a, b = 0, 1
while a < max:
yield a
a, b = b, a+b
Es equivalente a este que tal vez les puede ser mas claro para entender:
def fibonacci(max):
a = 0
b = 1
while a < max:
yield a
aux = a
a = b
b = aux + b
yield lo que hace es ir regresando el valor de a cada vez que el código pasa por el, la sintaxis que usan en el código del articulo “a, b = b, a+b” es una manera de asignar valores a las variables pero mantenido el valor de las variables ahorrándote usar el aux que use en el otro código, ya que fibonacci requiere sumar los dos números anteriores para generar el siguiente, les recomiendo que si no saben como funciona la serie de fibonacci la investiguen y después lean de nuevo ambos códigos y entenderán como funcionan, si tiene alguna duda pueden preguntarme y con gusto contestare
No entiendo este punto a, b = 0, 1
Un poco confuso jejej
El Yield entonces es como una especie de return ? Digamos retorna el valor de donde fue invocada ? pero sigue la ejecucion
que es “finonacci” , O es solo un ejemplo?
No me quedo muy claro el uso!
Interesante…
Excelente. Cada generators es un iteratos, pero no al revés.
Gracias
Genial!, aprendí algo nuevo.
Alguien me ayuda a leer esta linea?
a, b = b, a+b
El resultado seria este?
a = b
b = a+b
>>> def fibonacci(max):
... a, b=1, 1
... while a < max :
... yield a
... a, b = b, a+b
...
>>> fibonacci(20)
<generator object fibonacci at 0x7f2d85c580f8>
>>> im = fibonacci(20)
>>> fib_nums = [num for num in im]
>>> fib_nums
[1, 1, 2, 3, 5, 8, 13]
>>> fib_nums = [num for num in im]
>>> fib_nums
[] # tengo como respuesta un objeto vacio, pues una vez usado el generator se debe instanciar de nuevo.
Super! Aunque es raro ya no poder usar el generador!
Porque en el ultimo dice que no va a funcionar con fib1 y con fibonacci(30), si funcionara??
double_fib_nums = [num * 2 for num in fib1] # no va a funcionar
double_fib_nums = [num * 2 for num in fibonacci(30)] # sí funciona
Cuando ejecuto el código desde el directorio desde un cmd, donde antes voy entrando a cada carpeta, corre perfectamente y no se cierra. Pero a la hora de hacerlo con doble click al archivo, me permite ejecutarlo, pero al finalizar la operación ya sea create o cualquier otra se cierra al instante.
No queda muy claro que digamos.
Excelente, primero entiende el concepto de Fibonacci.
ahora bien, con más ejemplos, más sencillo se hace
Well, very useful
Excelente info, solo queda practicar y practicar
¿Este tipo de sentencias es exclusiva de python?. Me refiero a los generadores y a la funciones yield?
nunca me ha gustado este profesor, sus explicaciones a veces quedan cortas y pareciera que su entendimiento no es muy profundo
Gracias!
Gracias
def fibonacci(max):
a, b = 0, 1
while a < max:
yield a#es para retornar valores que se iteran. Todo esto guardado en un generator
a, b = b, a+b
fibonacci(20)#se crea un generador
#<generator object fibonacci at 0x000001C2269DE570>
for i in fibonacci(20):#para leer sus valores
print(i)#Se imprimen la secuencia fibonacci
Que significa que se ah agotado un generador?
muy buena explicación!
Excelente explicación
Excelente articulo
Esté reto lo hicimos en el curso avanzado de Python, con iterables, un generador de fibonacci infinito!
from fibonacci import Fibonacci
import time
def run():
iterable = Fibonacci()
for i in iterable.iter():
time.sleep(0.5)
print(i)
if __name__ == "__main__":
run()
Este tema puedes aprender muy detalladamente con el curso profesional de python con facundo en platzi.
n
¿Alguien podría explicarme que hace esta línea de código?
a, b = b, a+b
Excelente el ejemplo.
Iterator: Un objeto tipo iterator es un objeto que representa un flujo de datos, el cual puede ser recorrido en un proceso iterativo, como un bucle for, dentro de una función map o filter, en la creación de una list comprehension o generador, o en una comparación in
Esta sintaxis [num for num in fib1]
es list comprehensions. Las encuentran en el Curso intermedio de Python
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?