Python en español

Python en español #17: Tertulia 2021-01-26


Listen Later

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é:

                          <https://docs.python.org/3/library/functools.html#functools.lru_cache.

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

                            • Ojo con excepciones y filtraciones de memoria.

                            • [48:37] 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.

                            • [51:12] itertools:

                              https://docs.python.org/3/library/itertools.html. A Jesús
                              Cea no le entra en la cabeza la programación funcional.

                            • [56:02] ¿Qué es ser Pythonico?

                              • 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.
                                  • [01:08:22] Seguimos desgranando los trucos propuestos por

                                    Eduardo.

                                    • collections.defaultdict():
                                    • https://docs.python.org/3/library/collections.html#collections.defaultdict.
                                    • [01:11:12] iter() y next() admiten una parametro extra

                                      centinela opcional que especifica un valor que termina el
                                      iterador.

                                      • Utilizar objetos centinelas que no sean None, porque
                                      • None puede ser un objeto válido.
                                      • [01:17:32] Los "slices" son objetos que se pueden crear y

                                        utilizar: slice(1,100).

                                        • Pasar un iterador a una función abre posibilidades

                                          interesantes.

                                        • Slice Objects: https://docs.python.org/3/c-api/slice.html.

                                        • [01:23:42] contextlib.suppress()

                                          https://docs.python.org/3/library/contextlib.html#contextlib.suppress.

                                          • Hay que recordar que aunque la excepción se suprime, la
                                          • ejecución del cuerpo se corta en ese punto.
                                          • [01:24:47] pathlib:

                                            https://docs.python.org/3/library/pathlib.html.

                                          • [01:25:12] Usos atípicos de else: if, for, try,

                                            while...

                                            • https://docs.python.org/3/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops.

                                            • https://docs.python.org/3/tutorial/errors.html#handling-exceptions.

                                            • Teoría unificada sobre else en Python.

                                            • [01:30:07] El orden de los except ... IMPORTA.

                                            • [01:32:22] Tu yo del futuro tiene que tratar con tu yo del

                                              pasado. "Escribe código como si el siguiente que tuviera que
                                              trabajar con el fuese un psicópata asesino que sabe
                                              donde vives".

                                              • Sistemas de control de versiones: "Annotate" -> "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.

                                                        ...more
                                                        View all episodesView all episodes
                                                        Download on the App Store

                                                        Python en españolBy Jesús Cea


                                                        More shows like Python en español

                                                        View all
                                                        Libros para Emprendedores by Luis Ramos

                                                        Libros para Emprendedores

                                                        1,115 Listeners