05.18.2021 - By Jesús Cea
Eduardo Castro se desata y nos invita a comentar trucos y construcciones idiomáticas no evidentes https://podcast.jcea.es/python/17
Participantes:
Jesús Cea, email: [email protected], twitter:
@jcea, https://blog.jcea.es/,
https://www.jcea.es/. Conectando desde Madrid.
Eduardo Castro, email:
[email protected]. 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:
[email protected], 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.
[00:52] Haciendo tiempo hasta que entre más gente.
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/.
[06:02] Truco: Python -i: Ejecuta un script y pasa a modo
interactivo.
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 hacer import readline antes de
lanzar el modo interactivo.
[11:17] Regresión con ipdb: https://pypi.org/project/ipdb/.
[12:37] Nueva versión de Pyston https://www.pyston.org/.
Intérprete de Python más rápido. Un 50% más rápido que
cpython.
[16:22] Ver si dos fechas son iguales con datetime
https://docs.python.org/3/library/datetime.html.
Trabajar siempre en UTC
https://es.wikipedia.org/wiki/Tiempo_universal_coordinado,
aunque solo tengas una zona horaria.
[19:52] Jesús Cea ha investigado cómo funcionan los POSTs HTTP
en las protecciones CSRF https://es.wikipedia.org/wiki/CSRF.
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.
[24:32] ¿Optimizaciones cuando tienes grandes cantidades de
datos?
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.
[31:52] Gestión de memoria en Python.
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.
[35:17] Tipografía para programadores:
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.
[37:17] Eduardo Castro se ha currado una lista de trucos
sencillos pero interesantes:
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.
[43:02] LRU Caché:
"blame".
[01:33:57] Usos de lambda.
Módulo Operator: https://docs.python.org/3/library/operator.html.
[01:35:52] Algunos trucos cortos adicionales.
collections.deque:
https://docs.python.org/3/library/collections.html.
dateutil: https://pypi.org/project/python-dateutil/.
itertools:
https://docs.python.org/3/library/itertools.html.
if a < x < b:
>>> import dis
>>> dis.dis(lambda x: a < x < b)
1 0 LOAD_GLOBAL 0 (a)
2 LOAD_FAST 0 (x)
4 DUP_TOP
6 ROT_THREE
8 COMPARE_OP 0 (<)
10 JUMP_IF_FALSE_OR_POP 18
12 LOAD_GLOBAL 1 (b)
14 COMPARE_OP 0 (<)
16 RETURN_VALUE
>> 18 ROT_TWO
20 POP_TOP
22 RETURN_VALUE
Desempaquetado complejo:
>>> a, b, (c, d), *e, f = 1, 2, (3, 4), 5, 6, 7, 8, 9
>>> print(a,b,c,d,e,f)
1 2 3 4 [5, 6, 7, 8] 9
Usar la variable "guión bajo" para descartar valores. Ojo
con la internacionalización.
[01:56:22] Python cada vez tiene más "gotchas". Algunos
ejemplos:
Operador morsa. Tratado con projilidad en tertulias
anteriores.
Parámetros mutables.
Definir "closures" dentro de un for pero usarlo fuera.
Tuplas con un solo elemento. Es más evidente el constructor
tuple(), pero ojo: tuple('abc') -> ('a', 'b', 'c').
[02:01:06] ¡Terminamos con los trucos!
[02:01:37] Ideas para indexar y buscar el documentos:
Whoosh:
https://whoosh.readthedocs.io/en/latest/intro.html.
Solr: https://solr.apache.org/.
[02:04:22] Deberes para el futuro: módulos dis
https://docs.python.org/3/library/dis.html y enum
https://docs.python.org/3/library/enum.html.
[02:04:47] Sugerencia sobre visión artificial:
https://www.pyimagesearch.com/. De lo mejor que hay.
[02:06:47] regex https://pypi.org/project/regex/ que libera el
GIL https://en.wikipedia.org/wiki/Global_interpreter_lock.
[02:07:47] Acelerador y distribución de programas Python
precompilados en binario y empaquetados en un directorio e,
incluso, en un único fichero: Nuitka: https://nuitka.net/.
[02:08:57] Design of CPython’s Garbage Collector:
https://devguide.python.org/garbage_collector/.
[02:09:17] Cierre.
[02:10:52] Casi se nos olvida el aviso legal para grabar y
publicar las sesiones.
[02:12:55] Final.