DiscoverPython en españolPython en español #18: Tertulia 2021-02-02
Python en español #18: Tertulia 2021-02-02

Python en español #18: Tertulia 2021-02-02

Update: 2021-05-20
Share

Description

Anotaciones de tipos: ¿Son pythónicas? También versiones de paquetes y grafos de dependencias https://podcast.jcea.es/python/18

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:



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.




    • Problemas para publicar los audios.




      • Editar es un infierno.




      • Las notas de los audios tienen una importancia
        transcendental.






    • Dinámica de las tertulias.







  • <timestamp compact="1" offset="52" ts="512">[08:32 ]<topic> Presentaciones.</topic></timestamp>





  • <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.





  • <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 syntax

    No 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 un continue en un finally. 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

Comments 
00:00
00:00
1.0x

0.5x

0.8x

1.0x

1.25x

1.5x

2.0x

3.0x

Sleep Timer

Off

End of Episode

5 Minutes

10 Minutes

15 Minutes

30 Minutes

45 Minutes

60 Minutes

120 Minutes

Python en español #18: Tertulia 2021-02-02

Python en español #18: Tertulia 2021-02-02

jcea@jcea.es (Jesus Cea)