b'Eduardo Castro se desata y nos invita a comentar trucos y construcciones idiom\\xe1ticas no evidentes https://podcast.jcea.es/python/17\\n
Participantes:
\\nJes\\xfas Cea, email: jcea@jcea.es, twitter:\\n @jcea, https://blog.jcea.es/,\\n https://www.jcea.es/. Conectando desde Madrid.
\\nEduardo Castro, email:\\n info@ecdesign.es. Conectando desde A\\n Guarda.
\\nJavier, conectando desde Madrid.
\\nV\\xedctor Ram\\xedrez, twitter: @virako,\\n programador python y amante de vim, conectando desde Huelva.
\\nDani, conectando desde M\\xe1laga.
\\nMiguel S\\xe1nchez, email:\\n msanchez@uninet.edu, conectando desde\\n Canarias.
\\nJorge R\\xfaa, conectando desde Vigo.
\\nAudio editado por Pablo G\\xf3mez, twitter:\\n@julebek.
\\nLa 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[00:52] Haciendo tiempo hasta que entre m\\xe1s gente.
\\nRaspberry Pi Pico:\\n https://www.raspberrypi.org/products/raspberry-pi-pico/.
\\nMicropython: https://www.micropython.org/.
\\n[06:02] Truco: Python -i
: Ejecuta un script y pasa a modo\\n interactivo.
Tambi\\xe9n se puede hacer desde el propio c\\xf3digo con\\ncode.InteractiveConsole(locals=globals()).interact()
.
Jes\\xfas Cea se queja de que usando la invocaci\\xf3n desde c\\xf3digo\\nno funciona la edici\\xf3n de l\\xedneas. Javier da la pista correcta:\\npara que funcione, basta con hacer import readline
antes de\\nlanzar el modo interactivo.
[11:17] Regresi\\xf3n con ipdb: https://pypi.org/project/ipdb/.
\\n[12:37] Nueva versi\\xf3n de Pyston https://www.pyston.org/.
\\n[16:22] Ver si dos fechas son iguales con datetime
\\n https://docs.python.org/3/library/datetime.html.
[19:52] Jes\\xfas Cea ha investigado c\\xf3mo funcionan los POSTs HTTP\\n en las protecciones CSRF https://es.wikipedia.org/wiki/CSRF.
\\nBuena pr\\xe1ctica: La respuesta al POST es una redirecci\\xf3n a un\\n GET. Patr\\xf3n Post/Redirect/Get (PRG)\\n https://es.wikipedia.org/wiki/Post/Redirect/Get.
\\nVentajas de usar un framework.
\\n[24:32] \\xbfOptimizaciones cuando tienes grandes cantidades de\\n datos?
\\nTema muy amplio, hacen falta detalles del problema.
\\nSe ofrecen algunas ideas:
\\nMap/Reduce: https://en.wikipedia.org/wiki/Map_reduce.
\\nUsar generadores u otras construcciones "lazy" siempre\\n que sea posible.\\n https://wiki.python.org/moin/Generators.
\\n[31:52] Gesti\\xf3n de memoria en Python.
\\nDesign of CPython\\u2019s Garbage Collector:\\n https://devguide.python.org/garbage_collector/.
\\nHora de sacar la basura garbage collector - Pablo Galindo y\\n Victor Terr\\xf3n - PyConES 2018\\n https://www.youtube.com/watch?v=G9wOSExzs5g.
\\n[35:17] Tipograf\\xeda para programadores:
\\nVictor Mono: https://rubjo.github.io/victor-mono/.
\\nFira Code: https://fonts.google.com/specimen/Fira+Code.
\\nFira Code Retina:\\n https://github.com/tonsky/FiraCode/issues/872.
\\n[37:17] Eduardo Castro se ha currado una lista de trucos\\n sencillos pero interesantes:
\\nEn estas notas solo referenciamos los puntos a los que\\ndedicamos m\\xe1s tiempo, se habl\\xf3 de m\\xe1s cosas.
\\nEl documento para poder seguir los comentarios de la\\ngrabaci\\xf3n est\\xe1 en https://demo.hedgedoc.org/s/hEZB92q40#.
\\nhash(float(\'inf\')) -> 314159
.
[43:02] LRU Cach\\xe9:\\n <https://docs.python.org/3/library/functools.html#functools.lru_cache.
\\nYield:
\\nOjo con excepciones y filtraciones de memoria.
\\n[48:37] Uso interesante con los "context managers":\\n @contextlib.contextmanager
\\n https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager\\n y @contextlib.asynccontextmanager
\\n https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager.
[51:12] itertools:\\n https://docs.python.org/3/library/itertools.html. A Jes\\xfas\\n Cea no le entra en la cabeza la programaci\\xf3n funcional.
\\n[56:02] \\xbfQu\\xe9 es ser Pythonico?
\\nAunque est\\xe9 en la biblioteca est\\xe1ndar, no significa que sea\\n pyth\\xf3nico:
\\nasyncore:\\n https://docs.python.org/3/library/asyncore.html. Est\\xe1\\n marcado como obsoleto desde Python 3.6.
\\nMover m\\xe9todos funcionales en una librer\\xeda separada.
\\nLas dos jerarqu\\xedas distintas que exist\\xedan en Python 2.\\n Esto se unific\\xf3 en Python 3.
\\nfrom __future__ import ...
.
La migraci\\xf3n a Python 3 fue un intento de simplificar el\\n lenguaje. Pero Python 3 se est\\xe1 complicando cada vez\\n m\\xe1s.
\\n[01:08:22] Seguimos desgranando los trucos propuestos por\\n Eduardo.
\\ncollections.defaultdict()
:\\n https://docs.python.org/3/library/collections.html#collections.defaultdict.[01:11:12] iter()
y next()
admiten una parametro extra\\n centinela opcional que especifica un valor que termina el\\n iterador.
None
, porque\\n None
puede ser un objeto v\\xe1lido.[01:17:32] Los "slices" son objetos que se pueden crear y\\n utilizar: slice(1,100)
.
Pasar un iterador a una funci\\xf3n abre posibilidades\\n interesantes.
\\nSlice Objects
: https://docs.python.org/3/c-api/slice.html.
[01:23:42] contextlib.suppress()
\\n https://docs.python.org/3/library/contextlib.html#contextlib.suppress.
[01:24:47] pathlib:\\n https://docs.python.org/3/library/pathlib.html.
\\n[01:25:12] Usos at\\xedpicos de else
: if
, for
, try
,\\n while
...
https://docs.python.org/3/tutorial/errors.html#handling-exceptions.
\\nTeor\\xeda 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\\n pasado. "Escribe c\\xf3digo como si el siguiente que tuviera que\\n trabajar con el fuese un psic\\xf3pata asesino que sabe\\n donde vives".
\\n[01:33:57] Usos de lambda.
\\n[01:35:52] Algunos trucos cortos adicionales.
\\ncollections.deque
:\\n https://docs.python.org/3/library/collections.html.
dateutil
: https://pypi.org/project/python-dateutil/.
itertools
:\\n https://docs.python.org/3/library/itertools.html.
if a < x < b
:
>>> import dis\\n>>> dis.dis(lambda x: a < x < b)\\n 1 0 LOAD_GLOBAL 0 (a)\\n 2 LOAD_FAST 0 (x)\\n 4 DUP_TOP\\n 6 ROT_THREE\\n 8 COMPARE_OP 0 (<)\\n 10 JUMP_IF_FALSE_OR_POP 18\\n 12 LOAD_GLOBAL 1 (b)\\n 14 COMPARE_OP 0 (<)\\n 16 RETURN_VALUE\\n >> 18 ROT_TWO\\n 20 POP_TOP\\n 22 RETURN_VALUE\\n
\\nDesempaquetado complejo:
\\n>>> a, b, (c, d), *e, f = 1, 2, (3, 4), 5, 6, 7, 8, 9\\n>>> print(a,b,c,d,e,f)\\n1 2 3 4 [5, 6, 7, 8] 9\\n
\\nUsar la variable "gui\\xf3n bajo" para descartar valores. Ojo\\n con la internacionalizaci\\xf3n.
\\n[01:56:22] Python cada vez tiene m\\xe1s "gotchas". Algunos\\n ejemplos:
\\nOperador morsa. Tratado con projilidad en tertulias\\n anteriores.
\\nPar\\xe1metros mutables.
\\nDefinir "closures" dentro de un for
pero usarlo fuera.
Tuplas con un solo elemento. Es m\\xe1s evidente el constructor\\n tuple()
, pero ojo: tuple(\'abc\') -> (\'a\', \'b\', \'c\')
.
[02:01:06] \\xa1Terminamos con los trucos!
\\n[02:01:37] Ideas para indexar y buscar el documentos:
\\nWhoosh:\\n https://whoosh.readthedocs.io/en/latest/intro.html.
\\nSolr: https://solr.apache.org/.
\\n[02:04:22] Deberes para el futuro: m\\xf3dulos dis
\\n https://docs.python.org/3/library/dis.html y enum
\\n https://docs.python.org/3/library/enum.html.
[02:04:47] Sugerencia sobre visi\\xf3n artificial:\\n https://www.pyimagesearch.com/. De lo mejor que hay.
\\n[02:06:47] regex https://pypi.org/project/regex/ que libera el\\n GIL https://en.wikipedia.org/wiki/Global_interpreter_lock.
\\n[02:07:47] Acelerador y distribuci\\xf3n de programas Python\\n precompilados en binario y empaquetados en un directorio e,\\n incluso, en un \\xfanico fichero: Nuitka: https://nuitka.net/.
\\n[02:08:57] Design of CPython\\u2019s Garbage Collector:\\n https://devguide.python.org/garbage_collector/.
\\n[02:09:17] Cierre.
\\n[02:10:52] Casi se nos olvida el aviso legal para grabar y\\n publicar las sesiones.
\\n[02:12:55] Final.
\\n