¿Cuál es el beneficio de definir una función en una función en python?

Encontré este pedazo de código de python (pegado abajo) en effbot y me preguntaba:

¿Por qué definir una función dentro de una función?

import re, htmlentitydefs ## # Removes HTML or XML character references and entities from a text string. # # @param text The HTML (or XML) source text. # @return The plain text, as a Unicode string, if necessary. def unescape(text): def fixup(m): text = m.group(0) if text[:2] == "&#": # character reference try: if text[:3] == "&#x": return unichr(int(text[3:-1], 16)) else: return unichr(int(text[2:-1])) except ValueError: pass else: # named entity try: text = unichr(htmlentitydefs.name2codepoint[text[1:-1]]) except KeyError: pass return text # leave as is return re.sub("(?s)]*>|&#?\w+;", fixup, text) 

¿Por qué definir una función dentro de una función?

Para mantenerlo aislado. Solo se usa en este lugar. ¿Por qué definirlo más globalmente cuando se usa localmente?

Es solo otra forma de dividir una función grande en partes más pequeñas sin contaminar el espacio de nombres global con otro nombre de función. Muy a menudo, la función interna no es independiente, por lo que no pertenece correctamente al espacio de nombres global.

A menudo, la razón principal de este código es el cierre de funciones. Es algo poderoso que se aplica no solo a Python. Por ejemplo, JavaScript gana mucho de ellos.

Algunos puntos sobre cierres en Python – cierres en python .