Autor
|
Tema: Generadores y yield en Python… (Leído 9,514 veces)
|
El mas antiguo
Desconectado
Mensajes: 103
|
Hola gente linda, ¿cómo están? La consulta es ¿le encontraron en la vida real alguna utilidad a los generadores? Los consulto porque me pase 3 días enteros leyendo sobre el tema y en realidad todos los ejemplos son con números primos, impares, pares y no pasa de eso. Bueno es todo lo que necesito saber, ya que me falta aprender sobre yield from y otras cositas, pero si no tiene una utilidad significativa continuo con el siguiente tema.- def principal(): def tabla_del_cinco(oper): num = 1 while True: yield num , num * oper num += 1 try: operando = int(input("\n Ingrese la tabla que desea consultar...: ")) except: print("\n Debe ingresar un entero...") else: tabla = tabla_del_cinco(operando) print('\n===== "uno" para mostrar - "otro" para finalizar =====\n') while True: salir = input('"Ingrese...: ') if salir == '1': tupla = tuple(next(tabla)) final = f"{operando} x {tupla[0]} = {tupla[1]}" print(final) else: break if __name__ == "__main__": principal()
Slds. Daniel ☕☕☕
|
|
|
En línea
|
|
|
|
|
El mas antiguo
Desconectado
Mensajes: 103
|
Hola tocayo, gracias por ocuparte, para serte franco es la página que más había leído, por eso sigo con ta intriga de como aplicar en la práctica los generadores y yield, seguiremos investigando, gracias, abrazo…
Slds. Daniel ☕☕☕
|
|
|
En línea
|
|
|
|
Danielㅤ
Desconectado
Mensajes: 1.838
🔵🔵🔵🔵🔵🔵🔵
|
Bien, desde mi punto de vista personal y como programador yo te recomiendo que no te ocupes mucho de eso ahora, los generadores son poco utilizados y los programadores avanzados los suelen usar en casos muy específicos. Yo he creado muchos códigos y programas en los años activos como programador y nunca le he dado importancia a yield además que no le necesitado, de hecho de los muchos códigos que he visto solo apenas unos cuantos utilizaban yield.
Es mejor que sigas adelante y aprendas otras cosas, que te enfoques en cosas más importantes y necesarias.
Un abrazo
|
|
|
En línea
|
|
|
|
El mas antiguo
Desconectado
Mensajes: 103
|
Como verán continuo con lo mismo, en este caso el generador tiene una ventaja de tiempo con respecto a una manera «tradicional» de contar la cantidad de registros de un archivo .txt.- Alguien me podría decir, ¿ cómo puedo saber en memoria cuanto ocupa una y otra?, gracias import codecs import time inicio = time.time() filas = (row for row in open('Movimientos.txt')) row = 0 for fil in filas: row += 1 print(row) fin = time.time() print(fin-inicio) print("====================================") inicio = time.time() fila = 0 with codecs.open('Movimientos.txt', 'r', encoding='utf-8') as archivo: for row in archivo: fila += 1 print(fila) fin = time.time() print(fin-inicio)
51800 0.015956401824951172 ======================================================== 51800 0.11170220375061035
gracias Dani por los consejos... Slds. Daniel ☕☕☕
|
|
|
En línea
|
|
|
|
El mas antiguo
Desconectado
Mensajes: 103
|
Hola gente, ¿cómo están?, bueno, conseguí lo deseado, solo que los resultados me resultan todavía un tanto confusos, seguiré estudiando el tema.- import codecs import time import sys inicio = time.time() filas = (rows for rows in open('Movimientos.txt')) row = 0 for fil in filas: row += 1 print(f"Con comprensión de generadores...: {row} registros") fin = time.time() tiempoUno=fin-inicio print(f"Tiempo consumido con comprensión de generadores...:{tiempoUno:.10f}") print(f"Peso en memoria...; {sys.getsizeof(filas)} bytes") print("==============================================================") inicio = time.time() fila = 0 with codecs.open('Movimientos.txt', 'r', encoding='utf-8') as archivo: for row in archivo: fila += 1 print(f"De manera tradicional...: {fila} registros") fin = time.time() tiempoDos=fin-inicio print(f"Tiempo consumido de manera tradicional...:{tiempoDos:.10f}") print(f"Peso en memoria...; {sys.getsizeof(archivo)} bytes") print("==============================================================") print(f" Diferencia...: {tiempoUno-tiempoDos:.10f}")
Slds. Daniel ☕☕☕
|
|
|
En línea
|
|
|
|
Serapis
|
No procede realizar comparativa de tiempos...
Los generadores vienen en ayuda del programador para simplificar tanto la cantidad de código a escribir, como en establecer el flujo adecuadamente sin complicarse las barbas.
Si no logras entender eso, entonces no serás capaz de sacarle provecho.
|
|
|
En línea
|
|
|
|
El mas antiguo
Desconectado
Mensajes: 103
|
Hola, gracias por el consejo. Te comento que me llevo a esto, el blog donde encontré una explicación interesante sobre generadores, decía tener un archivo .txt con más de 64.000.000 de registros, con la manera "tradicional", por momentos la memoria colapsaba, en cambio, construyendo un generador no ocurría lo mismo.- Ya que estamos, en el segundo caso, ¿debo cerrar el archivo? import codecs with codecs.open('Movimientos.txt', 'r', encoding='utf-8') as archivo: print(type(archivo)) filas = (rows for rows in open('Movimientos.txt')) print(type(filas))
Slds. Daniel ☕☕☕
|
|
|
En línea
|
|
|
|
reymosquito
Desconectado
Mensajes: 81
|
Bueno, se ve que hay muchos "programadores" que dan su opinión, así que no lo haré, pero te comento algo que ya vas descubriendo: los generadores no son para ahorrar "tiempo", al contrario son más lerdos que la compresión de listas por ejemplo, sirven para ahorrar memoria, en grandes cantidades dependiendo de la dsiponibilidad de ella sin el uso de generadores la memoria colapsa. hay varias formas de crear generadores. para medir el uso de memoria se usa uno de los métodos que trae el módulo sys además hay otras formas de medir el "tiempo" la que estás usando es la más básica que abunda en la red. import sys dobles_lc = [num **2 for num in range(1,5000)] dobles_ge = (num **2 for num in range(1,5000)) print(sys.getsizeof(dobles_lc)) print(sys.getsizeof(dobles_ge))
En ese ejemplo creo dos "listas" una con por compresión la primera y la segunda con generadores después imprimo la memoria que ocupa cada una y ahí verás la diferencia que ocupan. Aumenta el tamaño y seguí comparando. Espero que te oriente al uso real de los generadores
|
|
|
En línea
|
|
|
|
El mas antiguo
Desconectado
Mensajes: 103
|
Hola, rey, muchas gracias por ocuparte. En primer lugar, no me hagas esos chistes, 6 días esperando que aparecieras, no te olvides que tengo 70, si te vas de vacaciones avisa, jajajajaja... Como siempre digo unas pocas líneas tuyas me enseñan más que 10 páginas del libro.- Seguramente me quedan un puñadito de preguntas, pero por el momento es suficiente.- Al resto que participo nuevamente muchas gracias.-
Slds. Daniel ☕☕☕
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Generadores electricos
Electrónica
|
s3tH
|
1
|
6,796
|
16 Noviembre 2009, 00:18 am
por skapunky
|
|
|
Generadores de contraseñas
Seguridad
|
juthemist
|
1
|
1,870
|
23 Septiembre 2014, 04:21 am
por engel lex
|
|
|
generadores de claves
Dudas Generales
|
ionurion
|
1
|
1,846
|
19 Enero 2015, 16:54 pm
por engel lex
|
|
|
[Resuelto] [DUDA] Yield en php
PHP
|
DarK_FirefoX
|
2
|
1,861
|
30 Marzo 2015, 22:47 pm
por DarK_FirefoX
|
|
|
Generadores en javascript
Desarrollo Web
|
Ali Baba
|
2
|
2,276
|
28 Mayo 2017, 02:12 am
por Ali Baba
|
|