-
[01:32] Nuevas versiones: Python 3.10a4 y Numpy.
-
[01:57] Don’t Use Recursion In Python Any More,Python Closure —
A Pythonic technique you must know
-
[10:02] ¿Qué es ser "Pythónico"?
-
[14:52] Python Ideas:
-
[16:52] ¿Comillas simples o comillas dobles? ' o ".
- Diferencias semánticas con otros lenguajes como C.
-
[23:07] Tamaño de columnas: ¿80?, ¿120?, ¿132?
-
[31:02] Primar la legibilidad, no el rendimiento.
-
Cuando tienes if ... else ..., ¿Qué caso pones primero?,
¿el corto o el largo? ¿Primero la condición normal?
-
Microoptimizaciones que complican la legibilidad sin
ganancia de rendimiento que importe en realidad.
-
[41:57] En las variables locales, la longitud del nombre de una
variable no impacta en el rendimiento.
-
[43:02] Curiosear el "bytecode"
https://es.wikipedia.org/wiki/Bytecode que genera Python.
-
[46:22] Bytecode generado para a + a:
>>> dis.dis(lambda a: a + a)
1 0 LOAD_FAST 0 (a)
2 LOAD_FAST 0 (a)
4 BINARY_ADD
6 RETURN_VALUE
-
[50:12] Python deja su pila de evaluación vacía al terminar de
calcular una expresión.
-
Máquina virtual de registros en vez de máquina virtual
orientada a pila.
- El compilador debe ser más sofisticado, pero puede
reutilizar valores.
-
Muchas operaciones redundantes:
>>> import dis
>>> def suma(valores):
... s=0
... for i in valores:
... s+=i
... return s
...
>>> dis.dis(suma)
2 0 LOAD_CONST 1 (0)
2 STORE_FAST 1 (s)
3 4 LOAD_FAST 0 (valores)
6 GET_ITER
>> 8 FOR_ITER 12 (to 22)
10 STORE_FAST 2 (i)
4 12 LOAD_FAST 1 (s)
14 LOAD_FAST 2 (i)
16 INPLACE_ADD
18 STORE_FAST 1 (s)
20 JUMP_ABSOLUTE 8
5 >> 22 LOAD_FAST 1 (s)
24 RETURN_VALUE
-
¿Qué ocurre a la hora de depurar o para gestionar
excepciones?
-
[56:32] Que un hilo modifique variables de otro hilo.
-
¡Guardas!
-
NOTA DESDE EL FUTURO:
-
[58:37] Pensábais que las interioridades del intérprete de
Python son aburridas, pero no...
-
La complejidad debe estar en tu programa, no en el lenguaje
o el intérprete.
-
Compiladores optimizadores. Python se está quedando atrás.
-
Hacer caché al buscar atributos:
-
[01:06:52] Huevos de pascua en Python:
-
[01:08:27] Usar pass o ... (ellipsis).
-
[01:09:22] El PEP 509 no es para hacer diccionarios inmutables.
-
[01:13:07] Curiosidades encontradas esta semana:
-
[01:17:02] Los problemas filosóficos que tiene Jesús Cea con
la programación asíncrona tal y como está implementada en Python.
-
[01:32:17] Es difícil plantear temas tan esotéricos sin una
preparación formal de la charla o sin avisar con tiempo para
que la gente se lo pueda ver con calma antes.
-
[01:33:32] Problemas con el control de carga de asyncio
https://docs.python.org/3/library/asyncio.html.
-
Vuelve a tratarse el tema de si la biblioteca estándar debe
crecer o adelgazar.
-
Según Jesús Cea, asyncio
https://docs.python.org/3/library/asyncio.html es la peor
opción.
-
Alternativas a asyncio:
-
La dificultad de luchar con una biblioteca que está incluída
en la biblioteca estándar.
-
[01:42:32] La programación asíncrona es útil para muchas más
cosas además de para gestionar peticiones de la red.
- Por ejemplo, operaciones de ficheros locales. Aprovechar
tanto que el disco sea lento como para lanzar operaciones
concurrentes a discos duros.
-
[01:44:12] Mejor usar concurrent.futures
https://docs.python.org/3/library/concurrent.futures.html que
threading https://docs.python.org/3/library/threading.html
directamente.
-
[01:45:42] Referencia al bug solucionado en la tertulia
anterior: Issue35930: Raising an exception raised in a "future"
instance will create reference cycles
https://bugs.python.org/issue35930.
-
Queda por ultimar el detalle de cómo solucionar el problema
exactamente y enviar el parche para que se integre
oficialmente en Python.
-
Jesús Cea describe las dos opciones que está barajando:
weakrefs https://docs.python.org/3/library/weakref.html o
try ... finally.
-
[01:50:57] Ya hubo "flames" brutales con Guido cuando se
introdujo el operador ternario en Python.
-
[01:55:02] Despedida.
-
[01:55:50] Final.