Aquí hay un ejemplo de la biblioteca estándar de Python, inspect.py. Lee actualmente
def strseq(object, convert, join=joinseq):
"""Recursively walk a sequence, stringifying each element."""
if type(object) in (list, tuple):
return join(map(lambda o, c=convert, j=join: strseq(o, c, j), object))
else:
return convert(object)
Esto tiene, como parámetros, una función de conversión y una función de unir, de forma recursiva y se acerca listas y tuplas. La recursión se implementa usando map(), donde el primer parámetro es una función. El código es anterior a la compatibilidad con cierres en Python, por lo que necesita dos argumentos predeterminados adicionales para pasar la conversión y unirse a la llamada recursiva.Con el cierre, esto se lee
def strseq(object, convert, join=joinseq):
"""Recursively walk a sequence, stringifying each element."""
if type(object) in (list, tuple):
return join(map(lambda o: strseq(o, convert, join), object))
else:
return convert(object)
En lenguajes orientados a objetos, que normalmente no se utiliza muy a menudo el cierre, como se puede usar objetos para pasar del estado - métodos consolidados y, cuando su lengua las tiene. Cuando Python no tenía cierres, la gente decía que Python emula cierres con objetos, mientras que Lisp emula objetos con cierres. Como un ejemplo de IDLE (ClassBrowser.py):
class ClassBrowser: # shortened
def close(self, event=None):
self.top.destroy()
self.node.destroy()
def init(self, flist):
top.bind("<Escape>", self.close)
Aquí, self.close es una devolución de llamada parámetro-menos invoca cuando se presiona Escape. Sin embargo, la implementación cercana necesita parámetros, a saber, self y luego self.top, self.node. Si Python no tenía métodos consolidados, se podría escribir
class ClassBrowser:
def close(self, event=None):
self.top.destroy()
self.node.destroy()
def init(self, flist):
top.bind("<Escape>", lambda:self.close())
Aquí, el lambda obtendría "auto" no de un parámetro, pero a partir del contexto.
Creo que puede echar un vistazo al siguiente enlace sobre los patrones de diseño que los cierres nos permiten implementar de manera concisa [publicar en los patrones de diseño de cierre] (http://arturoherrero.com/2012/04/25/closure -design-patterns /) – Sudarshan
Es desafortunado para la comunidad cuando se cierran preguntas como esta. Es una pregunta perfectamente razonable y que muchos cierres de aprendizaje, un tema difícil, tendrán. Comprender los casos de uso del mundo real es una gran manera de acelerar la curva de aprendizaje de un tema difícil. Afortunadamente, hubo muchas respuestas excelentes antes de que se cerrara. – Matt