Python en español #18: Tertulia 2021-02-02
Description
En este audio hay un hablante que no identifico. ¿Quien es?. Es
quien habla, por ejemplo, en 01:06:00 o en 01:12:00 . ¿Antoni?
Participantes:
Jesús Cea, email: jcea@jcea.es, twitter:
@jcea, https://blog.jcea.es/,
https://www.jcea.es/. Conectando desde Madrid.Víctor Ramírez, twitter: @virako,
programador python y amante de
vim, conectando desde Huelva.Dani, conectando desde Málaga.
Eduardo Castro, email:
info@ecdesign.es. Conectando desde A
Guarda.
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> Preámbulo.</topic></timestamp>
Design of CPython’s Garbage Collector:
https://devguide.python.org/garbage_collector/.Dificultades con el horario de la tertulia.
- Podría haber más tertulias en otros horarios, llevadas
por otras personas.
- Podría haber más tertulias en otros horarios, llevadas
Problemas para publicar los audios.
Editar es un infierno.
Las notas de los audios tienen una importancia
transcendental.
Dinámica de las tertulias.
- Antiguo podcast "Python en español":
https://podcast.jcea.es/python/.
- Antiguo podcast "Python en español":
<timestamp compact="1" offset="52" ts="512">[08:32 ]<topic> Presentaciones.</topic></timestamp>
Raspberry Pi Pico:
https://www.raspberrypi.org/products/raspberry-pi-pico/.Micropython: https://www.micropython.org/.
<timestamp compact="1" offset="52" ts="812">[13:32 ]<topic> El aviso legal para poder grabar los audios.</topic></timestamp>
<timestamp compact="1" offset="52" ts="872">[14:32 ]<topic> Bugs sobre "pickle"
https://docs.python.org/3/library/pickle.html en el módulo
__main__
.</topic></timestamp>Se trata de un problema conocido.
Ejemplo de código: https://pastebin.com/vGM1sh8r.
Issue24676: Error in pickle using cProfile
https://bugs.python.org/issue24676.Issue9914: trace/profile conflict with the use of
sys.modules[__name__]
https://bugs.python.org/issue9914.Issue9325: Add an option to pdb/trace/profile to run library
module as a script https://bugs.python.org/issue9325.
<timestamp compact="1" offset="52" ts="987">[16:27 ]<topic> Lo importante que es abrir bugs, para que puedan
solucionarse. Queja productiva.</topic></timestamp><timestamp compact="1" offset="52" ts="1092">[18:12 ]<topic> Nueva versión de MYPY http://mypy-lang.org/ y MYPYC
https://github.com/mypyc/mypyc, que aprovechan Python 3.9.</topic></timestamp>Sigue fallando mucho.
<timestamp compact="1" offset="52" ts="1242">[20:42 ]<topic> pyannotate https://pypi.org/project/pyannotate/ para
meter anotaciones de tipos de forma automática.</topic></timestamp>- Las dificultades de meter tipos en un proyecto ya maduro.
<timestamp compact="1" offset="52" ts="1372">[22:52 ]<topic> Puedes usar tipos o no. Son opcionales. Ventajas en
equipos grandes.</topic></timestamp>Linter: https://es.wikipedia.org/wiki/Lint.
Impone disciplina y una cultura.
Las anotaciones de tipos no se verifican en tiempo de
ejecución. Se usan en el sistema de test e integración
continua.Una de la ventaja de los "
__slots__
" es que si te
equivocas en el nombre de atributo en una asignación, te
dará un error claro. Los tipos ayudan aquí también."pyannotate" https://pypi.org/project/pyannotate/.
Las anotaciones de tipos te permiten luego compilar Python
para ganar rendimiento "sin coste".Las anotaciones se pueden meter en el mismo código o en un
fichero "compañero".Usar un fichero "compañero" es útil para poder usar
anotaciones modernas en versiones antiguas de Python.Evitar "contaminar" el sistema de control de versiones
con cambios masivos irrelevantes que ofuscan la historia
de un proyecto. Por ejemplo, el autor original del código.Que los creadores de código y los etiquetadores de tipos
sean personas diferentes.
"typeshed": Collection of library stubs for Python, with
static types: https://github.com/python/typeshed.¿Y meter tipos en los comentarios, como se hacía
antiguamente?Hay mucha literatura de ingeniería de software sobre si es
bueno documentar tipos o no, según el tipo de equipo y el
tipo de proyecto.
<timestamp compact="1" offset="52" ts="2417">[40:17 ]<topic> Python podría ser mucho más rápido aunque no se usen
tipos. Podría ser mucho más inteligente.</topic></timestamp>Descubrimiento de tipos en tiempo de ejecución.
Tema recurrente.
Numba: https://numba.pydata.org/.
Javascript V8:
https://en.wikipedia.org/wiki/V8_(JavaScript_engine).<timestamp compact="1" offset="52" ts="2586">[43:06 ]<topic> Habiendo tantos compiladores, ¿por qué no se integra
alguno en el intérprete normal de Python?</topic></timestamp>Complejidad y compatibilidad.
Faltan manos.
Hay muchos "gérmenes" que no germinan.
Dispersión de esfuerzos.
<timestamp compact="1" offset="52" ts="2772">[46:12 ]<topic> Puntos de dolor de Python para la gente que viene de
otros lenguajes:</topic></timestamp>Tipos.
Velocidad.
Espacios significantes.
<timestamp compact="1" offset="52" ts="2797">[46:37 ]<topic> ¿Qué es "Python"?</topic></timestamp>
Cada novedad de sintaxis de Python cambia el lenguaje. ¿Qué
es Python?- Problemas para los que llegan nuevos al lenguaje.
Hay organizaciones grandes que un lenguaje sin tipos ni
siquiera lo consideran.<timestamp compact="1" offset="52" ts="3082">[51:22 ]<topic> Cultura común en todos los proyectos Python. Baja
barrera de entrada si conoces esa cultura.</topic></timestamp>La cultura va evolucionando.
Solución de compromiso: Meter tipos solo en la frontera.
<timestamp compact="1" offset="52" ts="3182">[53:02 ]<topic> El tipado avanzado de Python 3.9 da un error de sintaxis
al importar el código en una versión anterior de Python.</topic></timestamp><timestamp compact="1" offset="52" ts="3286">[54:46 ]<topic> El operador morsa no se puede usar dentro de un "list
comprehension":</topic></timestamp>>>> [i for i in ('a', '' ,'b') if i := i.strip()]
File "<stdin>", line 1
[i for i in ('a', '' ,'b') if i := i.strip()]
^
SyntaxError: invalid syntaxNo queda otra que escribirlo como:
>>> [i.strip() for i in ('a', '' ,'b') if i.strip()]
['a', 'b']duplicando el
i.strip()
.<timestamp compact="1" offset="52" ts="3400">[56:40 ]<topic> En versiones de Python anteriores a 3.8 no se podría
usar uncontinue
en unfinally
. El texto era
https://docs.python.org/3.7/reference/compound_stmts.html#the-try-statement:</topic></timestamp>When a return, break or continue statement is executed in
the try suite of a try...finally statement, the finally clause
is also executed ‘on the way out.’ A continue statement is
i