Básicos del Lenguaje

1

Guía de instalación y conceptos básicos

2

Archivos y slides del curso práctico de Python

3

IMPORTANTE: Instalando Ubuntu Bash en Windows para facilitarte el seguimiento del curso desde Windows.

4

¿Qué es la programación?

5

¿Por qué programar con Python?

6

Operadores matemáticos

7

Variables y expresiones

8

Presentación del proyecto

9

Funciones

10

Usando funciones en nuestro proyecto

11

Operadores lógicos

12

Estructuras condicionales

Uso de strings y ciclos

13

Strings en Python

14

Operaciones con Strings en Python

15

Operaciones con strings y el comando Update

16

Operaciones con strings y el comando Delete

17

Operaciones con strings: Slices en python

18

For loops

19

While loops

20

Iterators and generators

Estructuras de Datos

21

Uso de listas

22

Operaciones con listas

23

Agregando listas a nuestro proyecto

24

Diccionarios

25

Agregando diccionarios a nuestro proyecto

26

Tuplas y conjuntos

27

Tuplas y conjuntos en código

28

Introducción al módulo collections

29

Python comprehensions

30

Búsquedas binarias

31

Continuando con las Búsquedas Binarias

32

Manipulación de archivos en Python 3

Uso de objetos y módulos

33

Decoradores

34

Decoradores en Python

35

¿Qué es la programación orientada a objetos?

36

Programación orientada a objetos en Python

37

Scopes and namespaces

38

Introducción a Click

39

Definición a la API pública

40

Clients

41

Servicios: Lógica de negocio de nuestra aplicación

42

Interface de create: Comunicación entre servicios y el cliente

43

Actualización de cliente

44

Interface de actualización

45

Manejo de errores y jerarquía de errores en Python

46

Context managers

Python en el mundo real

47

Aplicaciones de Python en el mundo real

Conclusiones finales

48

Python 2 vs 3 (Conclusiones)

Clases bonus

49

Entorno Virtual en Python y su importancia: Python en el mundo real

Iterators and generators

20/49

Lectura

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

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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