Python en español #17: Tertulia 2021-01-26
Description
Participantes:
Jesús Cea, email: jcea@jcea.es, twitter:
@jcea, https://blog.jcea.es/,
https://www.jcea.es/. Conectando desde Madrid.Eduardo Castro, email:
info@ecdesign.es. Conectando desde A
Guarda.Javier, conectando desde Madrid.
Víctor Ramírez, twitter: @virako,
programador python y amante de vim, conectando desde Huelva.Dani, conectando desde Málaga.
Miguel Sánchez, email:
msanchez@uninet.edu, conectando desde
Canarias.Jorge Rúa, conectando desde Vigo.
Audio editado por Pablo Gómez, twitter:
@julebek.
La música de la entrada y la salida es "Lightning Bugs", de Jason
Shaw. Publicada en https://audionautix.com/ con licencia
- Creative Commons Attribution 4.0 International
License.
<timestamp compact="1" offset="52" ts="52">[00:52 ]<topic> Haciendo tiempo hasta que entre más gente.</topic></timestamp>
Raspberry Pi Pico:
https://www.raspberrypi.org/products/raspberry-pi-pico/.- Jesús Cea está encantado con su rango de alimentación.
Micropython: https://www.micropython.org/.
<timestamp compact="1" offset="52" ts="362">[06:02 ]<topic> Truco:
Python -i
: Ejecuta un script y pasa a modo
interactivo.</topic></timestamp>También se puede hacer desde el propio código con
code.InteractiveConsole(locals=globals()).interact()
.Jesús Cea se queja de que usando la invocación desde código
no funciona la edición de líneas. Javier da la pista correcta:
para que funcione, basta con hacerimport readline
antes de
lanzar el modo interactivo.<timestamp compact="1" offset="52" ts="677">[11:17 ]<topic> Regresión con ipdb: https://pypi.org/project/ipdb/.</topic></timestamp>
<timestamp compact="1" offset="52" ts="757">[12:37 ]<topic> Nueva versión de Pyston https://www.pyston.org/.</topic></timestamp>
- Intérprete de Python más rápido. Un 50% más rápido que
cpython.
- Intérprete de Python más rápido. Un 50% más rápido que
<timestamp compact="1" offset="52" ts="982">[16:22 ]<topic> Ver si dos fechas son iguales con
datetime
https://docs.python.org/3/library/datetime.html.</topic></timestamp>- Trabajar siempre en UTC
https://es.wikipedia.org/wiki/Tiempo_universal_coordinado,
aunque solo tengas una zona horaria.
- Trabajar siempre en UTC
<timestamp compact="1" offset="52" ts="1192">[19:52 ]<topic> Jesús Cea ha investigado cómo funcionan los POSTs HTTP
en las protecciones CSRF https://es.wikipedia.org/wiki/CSRF.</topic></timestamp>Buena práctica: La respuesta al POST es una redirección a un
GET. Patrón Post/Redirect/Get (PRG)
https://es.wikipedia.org/wiki/Post/Redirect/Get.Ventajas de usar un framework.
<timestamp compact="1" offset="52" ts="1472">[24:32 ]<topic> ¿Optimizaciones cuando tienes grandes cantidades de
datos?</topic></timestamp>Tema muy amplio, hacen falta detalles del problema.
Se ofrecen algunas ideas:
Map/Reduce: https://en.wikipedia.org/wiki/Map_reduce.
Usar generadores u otras construcciones "lazy" siempre
que sea posible.
https://wiki.python.org/moin/Generators.
<timestamp compact="1" offset="52" ts="1912">[31:52 ]<topic> Gestión de memoria en Python.</topic></timestamp>
Design of CPython’s Garbage Collector:
https://devguide.python.org/garbage_collector/.Hora de sacar la basura garbage collector - Pablo Galindo y
Victor Terrón - PyConES 2018
https://www.youtube.com/watch?v=G9wOSExzs5g.
<timestamp compact="1" offset="52" ts="2117">[35:17 ]<topic> Tipografía para programadores:</topic></timestamp>
Victor Mono: https://rubjo.github.io/victor-mono/.
Fira Code: https://fonts.google.com/specimen/Fira+Code.
Fira Code Retina:
https://github.com/tonsky/FiraCode/issues/872.
<timestamp compact="1" offset="52" ts="2237">[37:17 ]<topic> Eduardo Castro se ha currado una lista de trucos
sencillos pero interesantes:</topic></timestamp>En estas notas solo referenciamos los puntos a los que
dedicamos más tiempo, se habló de más cosas.El documento para poder seguir los comentarios de la
grabación está en https://demo.hedgedoc.org/s/hEZB92q40#.hash(float('inf')) -> 314159
.<timestamp compact="1" offset="52" ts="2582">[43:02 ]<topic> LRU Caché:
<https://docs.python.org/3/library/functools.html#functools.lru_cache.</topic></timestamp>- Bugs abundantes en LRU Cache y múltiples hilos:
https://bugs.python.org/issue?%40columns=id%2Cactivity%2Ctitle%2Ccreator%2Cassignee%2Cstatus%2Ctype&%40sort=-activity&%40filter=status&%40action=searchid&ignore=file%3Acontent&%40search_text=lru_cache+threads&submit=search&status=-1%2C1%2C2%2C3.
- Bugs abundantes en LRU Cache y múltiples hilos:
Yield:
Ojo con excepciones y filtraciones de memoria.
<timestamp compact="1" offset="52" ts="2917">[48:37 ]<topic> Uso interesante con los "context managers":
@contextlib.contextmanager
https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager
y@contextlib.asynccontextmanager
https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager.</topic></timestamp>
<timestamp compact="1" offset="52" ts="3072">[51:12 ]<topic> itertools:
https://docs.python.org/3/library/itertools.html. A Jesús
Cea no le entra en la cabeza la programación funcional.</topic></timestamp>
<timestamp compact="1" offset="52" ts="3362">[56:02 ]<topic> ¿Qué es ser Pythonico?</topic></timestamp>
Aunque esté en la biblioteca estándar, no significa que sea
pythónico:asyncore:
https://docs.python.org/3/library/asyncore.html. Está
marcado como obsoleto desde Python 3.6.Mover métodos funcionales en una librería separada.
Las dos jerarquías distintas que existían en Python 2.
Esto se unificó en Python 3.from __future__ import ...
.La migración a Python 3 fue un intento de simplificar el
lenguaje. Pero Python 3 se está complicando cada vez
más.- La complejidad fragmenta los diferentes idiomas del
lenguaje.
- La complejidad fragmenta los diferentes idiomas del
<timestamp compact="0" offset="52" ts="4102">[01:08:22 ]<topic> Seguimos desgranando los trucos propuestos por
Eduardo.</topic></timestamp>collections.defaultdict()
:
https://docs.python.org/3/library/collections.html#collections.defaultdict.
<timestamp compact="0" offset="52" ts="4272">[01:11:12 ]<topic>
iter()
ynext()
admiten una parametro extra
centinela opcional que especifica un valor que termina el
iterador.</topic></timestamp>- Utilizar objetos centinelas que no sean
None
, porque
None
puede ser un objeto válido.
- Utilizar objetos centinelas que no sean
<timestamp compact="0" offset="52" ts="4652">[01:1