[Py-MAD] Don’t Use Recursion In Python Any More,Python Closure — A Pythonic technique you must know

Jesus Cea jcea at jcea.es
Tue Jan 5 15:42:06 CET 2021


On 2/1/21 23:02, Javier Luna Molina wrote:
> Respondo que las tertulias nunca me vienen bien de horario y quería 
> participar de alguna forma, así que allá que voy!

Se ha comentado ir variando el día y hora de las tertulias para ampliar 
las opciones. Siendo reuniones frecuentes (semanales), perderse algunas 
no debería ser grave. El mayor problema es que ahora mismo se está 
creando una cierta continuidad en la asistencia, que puede perderse si 
nos desperdigamos en diferentes horarios. Tal vez se pueda pensar en 
tener varias tertulias independientes. No sé.

> Según entiendo, se trata de una forma de implementar una solución 
> iterativa equivalente a previas soluciones recursivas, pero creo que 
> usar closures en este contexto es intentar meterlas con calzador en la 
> discusión "recursivo vs iterativo"... ¿Qué tienen de malo los bucles o 
> los generadores?

La propuesta del artículo (convertir funciones recursivas a closures) me 
parece confusa, compleja e irrelevante, pero lo que me ha interesado 
mucho del artículo es el uso de "closures" para mantener estado entre 
llamadas a una función. Poder pasar por ahí una función con estado 
persistente me parece una idea valiosa para añadir a mi arsenal de 
programador. La idea de especializar una función y utilizar esa 
especialización después me parece una idea valiosa.

Es cierto que en algunos casos se pueden usar iteradores y generadores, 
pero no siempre. En algunos caso se puede usar "functools.partial()", 
como explica Chema Cortés en otro mensaje, pero no siempre (no hay 
estado persistente). Lo normal y obvio sería usar objetos, pero son 
pesados y "verbose".

Utilizar closures es una herramienta más al arsenal. Bastante general e 
interesante, pero algo confusa. Para dosificar.

Que sea tan eficiente, es un plus adicional. Como persona interesada en 
la teoría e implementación del lenguaje, estas cosas me interesan mucho.

Los "closures" no son algo nuevo. Es como funcionan los 
iteradores/generadores y quien haya programado decoradores se ha comido 
"closures" sí o sí. Generalizar el concepto, que es para lo que me ha 
servido el artículo, me parece valioso más allá de si es mejor hacer 
algo concreto de forma recursiva o iterativa, que no deja de ser un 
ejemplo concreto de uso de una idea general.

> De vuelta al artículo, he echado de menos una mayor investigación sobre 
> la recursividad, pego unos links acerca de artículos que creo que pueden 
> ser de interés:

Como ya he explicado, lo que yo he extraído del artículo es el uso de 
"closures" como mecanismo de asociar estado persistente a una función. 
El autor lo usa como forma de evitar recursión en un problema concreto 
(que no requiere recursión en absoluto, se puede resolver de forma más 
claras), pero a mí me ha parecido confuso y proclive a errores, además 
de innecesario en ese ejemplo concreto. Pero me he quedado con la idea 
general, que sí que me parece interesante.

Curiosearé los enlaces que mandas, que parecen muy interesantes. Pueden 
ser tema de conversación de la tertulia de hoy :-).

> Ya como bonus y como disculpas por el tochazo, dejo esta extensión de 
> Firefox 
> <https://addons.mozilla.org/es/firefox/addon/medium-unlimited-read-for-free/> 
> que desbloquea el paywall de algunos sitios incluyendo medium y sucedáneos.

Yo tengo el truco de entrar en modo incógnito o, simplemente, borrar las 
cookies para esa web. No obstante en este caso concreto el artículo 
requería registro hasta hace unos días :-).

Si no fuera offtopic podríamos discutir largo y tendido sobre los 
problemas de la concentración de internet en unos pocos jugadores :-). 
Supongo que por aquí todo el mundo usa github, por ejemplo... :-). Uis, 
mejor no abrir ese melón :-)

-- 
Jesús Cea Avión                         _/_/      _/_/_/        _/_/_/
jcea at jcea.es - https://www.jcea.es/    _/_/    _/_/  _/_/    _/_/  _/_/
Twitter: @jcea                        _/_/    _/_/          _/_/_/_/_/
jabber / xmpp:jcea at jabber.org  _/_/  _/_/    _/_/          _/_/  _/_/
"Things are not so easy"      _/_/  _/_/    _/_/  _/_/    _/_/  _/_/
"My name is Dump, Core Dump"   _/_/_/        _/_/_/      _/_/  _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz

-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 495 bytes
Desc: OpenPGP digital signature
URL: <https://lists.es.python.org/pipermail/madrid/attachments/20210105/b093a4bd/attachment.bin>


More information about the Madrid mailing list