Python en espanol #18: Tertulia 2021-02-02

Published: May 20, 2021, 10 a.m.

Anotaciones de tipos: \xbfSon pyth\xf3nicas? Tambi\xe9n versiones de paquetes y grafos de dependencias https://podcast.jcea.es/python/18\n

En este audio hay un hablante que no identifico. \xbfQuien es?. Es\nquien habla, por ejemplo, en 01:06:00 o en 01:12:00. \xbfAntoni?

\n

Participantes:

\n\n

Audio editado por Pablo G\xf3mez, twitter:\n@julebek.

\n

La m\xfasica de la entrada y la salida es "Lightning Bugs", de Jason\nShaw. Publicada en https://audionautix.com/ con licencia\n- Creative Commons Attribution 4.0 International\nLicense.

\n
    \n
  • \n

    [00:52] Pre\xe1mbulo.

    \n
      \n
    • \n

      Design of CPython\u2019s Garbage Collector:\n https://devguide.python.org/garbage_collector/.

      \n
    • \n
    • \n

      Dificultades con el horario de la tertulia.

      \n
        \n
      • Podr\xeda haber m\xe1s tertulias en otros horarios, llevadas\n por otras personas.
      • \n
      \n
    • \n
    • \n

      Problemas para publicar los audios.

      \n
        \n
      • \n

        Editar es un infierno.

        \n
      • \n
      • \n

        Las notas de los audios tienen una importancia\n transcendental.

        \n
      • \n
      \n
    • \n
    • \n

      Din\xe1mica de las tertulias.

      \n\n
    • \n
    \n
  • \n
  • \n

    [08:32] Presentaciones.

    \n\n
  • \n
  • \n

    [13:32] El aviso legal para poder grabar los audios.

    \n
  • \n
  • \n

    [14:32] Bugs sobre "pickle"\n https://docs.python.org/3/library/pickle.html en el m\xf3dulo\n __main__.

    \n

    Se trata de un problema conocido.

    \n\n
  • \n
  • \n

    [16:27] Lo importante que es abrir bugs, para que puedan\n solucionarse. Queja productiva.

    \n
  • \n
  • \n

    [18:12] Nueva versi\xf3n de MYPY http://mypy-lang.org/ y MYPYC\n https://github.com/mypyc/mypyc, que aprovechan Python 3.9.

    \n

    Sigue fallando mucho.

    \n
  • \n
  • \n

    [20:42] pyannotate https://pypi.org/project/pyannotate/ para\n meter anotaciones de tipos de forma autom\xe1tica.

    \n
      \n
    • Las dificultades de meter tipos en un proyecto ya maduro.
    • \n
    \n
  • \n
  • \n

    [22:52] Puedes usar tipos o no. Son opcionales. Ventajas en\n equipos grandes.

    \n
      \n
    • \n

      Linter: https://es.wikipedia.org/wiki/Lint.

      \n
    • \n
    • \n

      Impone disciplina y una cultura.

      \n
    • \n
    • \n

      Las anotaciones de tipos no se verifican en tiempo de\n ejecuci\xf3n. Se usan en el sistema de test e integraci\xf3n\n continua.

      \n
    • \n
    • \n

      Una de la ventaja de los "__slots__" es que si te\n equivocas en el nombre de atributo en una asignaci\xf3n, te\n dar\xe1 un error claro. Los tipos ayudan aqu\xed tambi\xe9n.

      \n
    • \n
    • \n

      "pyannotate" https://pypi.org/project/pyannotate/.

      \n
    • \n
    • \n

      Las anotaciones de tipos te permiten luego compilar Python\n para ganar rendimiento "sin coste".

      \n
    • \n
    • \n

      Las anotaciones se pueden meter en el mismo c\xf3digo o en un\n fichero "compa\xf1ero".

      \n
        \n
      • \n

        Usar un fichero "compa\xf1ero" es \xfatil para poder usar\n anotaciones modernas en versiones antiguas de Python.

        \n
      • \n
      • \n

        Evitar "contaminar" el sistema de control de versiones\n con cambios masivos irrelevantes que ofuscan la historia\n de un proyecto. Por ejemplo, el autor original del c\xf3digo.

        \n
      • \n
      • \n

        Que los creadores de c\xf3digo y los etiquetadores de tipos\n sean personas diferentes.

        \n
      • \n
      \n
    • \n
    • \n

      "typeshed": Collection of library stubs for Python, with\n static types: https://github.com/python/typeshed.

      \n
    • \n
    • \n

      \xbfY meter tipos en los comentarios, como se hac\xeda\n antiguamente?

      \n
    • \n
    • \n

      Hay mucha literatura de ingenier\xeda de software sobre si es\n bueno documentar tipos o no, seg\xfan el tipo de equipo y el\n tipo de proyecto.

      \n
    • \n
    \n
  • \n
  • \n

    [40:17] Python podr\xeda ser mucho m\xe1s r\xe1pido aunque no se usen\n tipos. Podr\xeda ser mucho m\xe1s inteligente.

    \n
      \n
    • \n

      Descubrimiento de tipos en tiempo de ejecuci\xf3n.

      \n
    • \n
    • \n

      Tema recurrente.

      \n
    • \n
    • \n

      Numba: https://numba.pydata.org/.

      \n
    • \n
    • \n

      Javascript V8:\n https://en.wikipedia.org/wiki/V8_(JavaScript_engine).

      \n
    • \n
    • \n

      [43:06] Habiendo tantos compiladores, \xbfpor qu\xe9 no se integra\n alguno en el int\xe9rprete normal de Python?

      \n
        \n
      • \n

        Complejidad y compatibilidad.

        \n
      • \n
      • \n

        Faltan manos.

        \n
      • \n
      • \n

        Hay muchos "g\xe9rmenes" que no germinan.

        \n
      • \n
      • \n

        Dispersi\xf3n de esfuerzos.

        \n
      • \n
      \n
    • \n
    \n
  • \n
  • \n

    [46:12] Puntos de dolor de Python para la gente que viene de\n otros lenguajes:

    \n
      \n
    • \n

      Tipos.

      \n
    • \n
    • \n

      Velocidad.

      \n
    • \n
    • \n

      Espacios significantes.

      \n
    • \n
    \n
  • \n
  • \n

    [46:37] \xbfQu\xe9 es "Python"?

    \n
      \n
    • \n

      Cada novedad de sintaxis de Python cambia el lenguaje. \xbfQu\xe9\n es Python?

      \n
        \n
      • Problemas para los que llegan nuevos al lenguaje.
      • \n
      \n
    • \n
    • \n

      Hay organizaciones grandes que un lenguaje sin tipos ni\n siquiera lo consideran.

      \n
    • \n
    • \n

      [51:22] Cultura com\xfan en todos los proyectos Python. Baja\n barrera de entrada si conoces esa cultura.

      \n
    • \n
    • \n

      La cultura va evolucionando.

      \n
    • \n
    • \n

      Soluci\xf3n de compromiso: Meter tipos solo en la frontera.

      \n
    • \n
    \n
  • \n
  • \n

    [53:02] El tipado avanzado de Python 3.9 da un error de sintaxis\n al importar el c\xf3digo en una versi\xf3n anterior de Python.

    \n
  • \n
  • \n

    [54:46] El operador morsa no se puede usar dentro de un "list\n comprehension":

    \n
        >>> [i for i in ('a', '' ,'b') if i := i.strip()]\n      File "<stdin>", line 1\n        [i for i in ('a', '' ,'b') if i := i.strip()]\n                                        ^\n    SyntaxError: invalid syntax\n
    \n

    No queda otra que escribirlo como:

    \n
            >>> [i.strip() for i in ('a', '' ,'b') if i.strip()]\n        ['a', 'b']\n
    \n

    duplicando el i.strip().

    \n
  • \n
  • \n

    [56:40] En versiones de Python anteriores a 3.8 no se podr\xeda\n usar un continue en un finally. El texto era\n https://docs.python.org/3.7/reference/compound_stmts.html#the-try-statement:

    \n
    \n

    When a return, break or continue statement is executed in\nthe try suite of a try...finally statement, the finally clause\nis also executed \u2018on the way out.\u2019 A continue statement is\nillegal in the finally clause. (The reason is a problem with\nthe current implementation \u2014 this restriction may be lifted in\nthe future).

    \n
    \n\n
  • \n
  • \n

    [57:47] f-string con datetime\n https://docs.python.org/3/library/datetime.html.

    \n\n
  • \n
  • \n

    [59:22] Modo depuraci\xf3n en f-strings en Python 3.8:

    \n
    >>> a = 5\n>>> f'{a=}'\n'a=5'\n
    \n

    \xdatil para el loging.

    \n
  • \n
  • \n

    [01:00:47] Versiones fijas de dependencias y actualizar un\n despliegue.

    \n\n
  • \n
  • \n

    [01:14:22] \xbfPor qu\xe9 se ha instalado este paquete, qu\xe9 paquetes\n exige y qu\xe9 paquetes dependen de \xe9l?

    \n\n
  • \n
  • \n

    [01:19:22] Visualizar el grafo de versiones de un sistema de\n control de versiones moderno. Por ejemplo con Mercurial: "hg\n glog" https://www.mercurial-scm.org/.

    \n
  • \n
  • \n

    [01:23:07] Recogida de basuras:

    \n
      \n
    • \n

      Design of CPython\u2019s Garbage Collector:\n https://devguide.python.org/garbage_collector/.

      \n
    • \n
    • \n

      Hora de sacar la basura garbage collector - Pablo Galindo y\n Victor Terr\xf3n - PyConES 2018\n https://www.youtube.com/watch?v=G9wOSExzs5g.

      \n
    • \n
    • \n

      La recolecci\xf3n de basura de la generaci\xf3n m\xe1s antigua\n funciona de forma diferente. En vez de ser por un n\xfamero\n fijo de desequilibrio entre creaci\xf3n y destrucci\xf3n de\n objetos, funciona por porcentaje.

      \n
    • \n
    \n
  • \n
  • \n

    [01:31:37] Divagaci\xf3n: Powerball https://powerball.org.uk/.

    \n
  • \n
  • \n

    [01:31:52] Explicaci\xf3n de c\xf3mo funciona "__slots__"\n https://docs.python.org/3/reference/datamodel.html.

    \n
  • \n
  • \n

    [01:34:22] Libro "CPython Internals":\n https://realpython.com/products/cpython-internals-book/.

    \n\n
  • \n
  • \n

    [01:36:42] M\xe1s sobre "__slots__" \n https://docs.python.org/3/reference/datamodel.html.

    \n
      \n
    • \n

      T\xe9cnica est\xe1ndar.

      \n
    • \n
    • \n

      Un diccionario vac\xedo ocupa 64 bytes: sys.getsizeof({}).

      \n
    • \n
    • \n

      Se puede usar para evitar errores mecanogr\xe1ficos al escribir\n en atributos.

      \n
    • \n
    \n
  • \n
  • \n

    [01:38:52] "AutoScraper: A Smart, Automatic, Fast and\n Lightweight Web Scraper for Python"\n https://pypi.org/project/autoscraper/. B\xfasquedas "borrosas".

    \n
      \n
    • Seguimos sin encontrar la biblioteca de scraping de foros de\n la que ha hablado Eduardo en tertulias anteriores.
    • \n
    \n
  • \n
  • \n

    [01:43:02] Librer\xeda para dibujar grafos: graphviz\n https://pypi.org/project/graphviz/.

    \n\n
  • \n
  • \n

    [01:47:22] \xbfC\xf3mo asegurarse que el nombre de un fichero no tenga\n caracteres extra\xf1os? \xa1Problema de seguridad!

    \n\n
  • \n
  • \n

    [01:52:07] \xa1Usa la versi\xf3n actual de Python, leches! Ahora\n mismo, Python 3.9.

    \n
      \n
    • \n

      Ventajas de compilar el int\xe9rprete desde c\xf3digo fuente para\n no depender de la versi\xf3n que te proporciona el sistema\n operativo.

      \n
    • \n
    • \n

      Puedes tener tu propio int\xe9rprete de Python dentro de un\n "virtualenv" https://pypi.org/project/virtualenv/.

      \n
    • \n
    • \n

      Proyectos "llave en mano". El cliente quiere algo que se\n instale como un componente en lo que ya conoce. Por ejemplo,\n en un panel de configuraci\xf3n en un servicio de hospedaje.

      \n
    • \n
    • \n

      [01:56:47] Jes\xfas Cea repite una vez m\xe1s la an\xe9cdota de que\n al principio de los tiempos para conducir un coche ten\xedas\n que ser mec\xe1nico, pero ya no.

      \n

      Falta toda la base, pero... \xbfHace falta?

      \n
    • \n
    \n
  • \n
  • \n

    [01:59:12] Memoria escasa en un microcontrolador.

    \n
  • \n
  • \n

    [01:59:55] Final.

    \n
  • \n