wordpress

Python Closure: Aprende qué es y cómo usar una closure en Python

Definición de una closure

Una closure en Python es una función que recuerda y tiene acceso a las variables locales de la función en la que fue creada, incluso después de que la función haya terminado de ejecutarse. En otras palabras, una closure es una función interna que tiene acceso a las variables de su función externa, incluso cuando la función externa ha finalizado su ejecución.

En Python, las closures se crean cuando una función interna hace referencia a una variable de una función externa. La función interna se convierte en una closure y retiene una referencia a la variable de la función externa, incluso después de que la función externa haya terminado de ejecutarse.

Características de una closure

Las closures en Python tienen las siguientes características:

  • Una closure es una función interna que tiene acceso a las variables de su función externa.
  • Una closure retiene una referencia a la variable de la función externa, incluso después de que la función externa haya terminado de ejecutarse.
  • Una closure puede acceder a las variables locales de la función externa, incluso si la función externa ya no está en el ámbito.
  • Una closure puede modificar las variables de la función externa.
  • Una closure puede ser pasada como argumento a otra función o retornada como resultado de una función.

Creación de una closure en Python

Para crear una closure en Python, se debe definir una función interna dentro de una función externa y hacer referencia a una variable de la función externa dentro de la función interna. A continuación se muestra un ejemplo de cómo crear una closure en Python:

Recomendado:  Laravel vs Symfony: Principales diferencias entre los dos frameworks

«`python
def funcion_externa(x):
def funcion_interna(y):
return x + y
return funcion_interna

closure = funcion_externa(5)
print(closure(3)) # Output: 8
«`

En este ejemplo, la función externa `funcion_externa` recibe un argumento `x` y define una función interna `funcion_interna` que recibe un argumento `y`. La función interna retorna la suma de `x` y `y`. Luego, la función externa retorna la función interna.

Al llamar a la función externa `funcion_externa` con el argumento `5`, se crea una closure que retiene una referencia a la variable `x` con el valor `5`. Luego, al llamar a la closure con el argumento `3`, se suma `5` y `3`, obteniendo como resultado `8`.

Uso de una closure en Python

Las closures en Python se pueden utilizar de diversas formas, como por ejemplo:

  • Para encapsular datos y comportamientos relacionados en un solo lugar.
  • Para crear funciones especializadas que utilizan datos específicos.
  • Para implementar funciones generadoras.
  • Para implementar decoradores.

Las closures también son útiles cuando se necesita mantener el estado de una función a lo largo de múltiples llamadas. Por ejemplo, se puede utilizar una closure para contar el número de veces que se ha llamado a una función:

«`python
def contador():
count = 0
def incrementar():
nonlocal count
count += 1
return count
return incrementar

contador1 = contador()
print(contador1()) # Output: 1
print(contador1()) # Output: 2
print(contador1()) # Output: 3

contador2 = contador()
print(contador2()) # Output: 1
print(contador2()) # Output: 2
«`

En este ejemplo, la función externa `contador` define una variable `count` y una función interna `incrementar`. La función interna incrementa la variable `count` en `1` cada vez que se llama y retorna el valor actualizado. Al llamar a la función externa `contador`, se crea una closure que retiene una referencia a la variable `count`. Luego, al llamar a la closure, se incrementa el contador y se retorna el valor actualizado.

Recomendado:  Controller Middleware en Laravel: Función y uso en el desarrollo web

En este caso, se crean dos closures `contador1` y `contador2`, cada una con su propio contador independiente. Al llamar a las closures, se incrementa el contador correspondiente y se retorna el valor actualizado.

Ejemplos de closures en Python

A continuación se presentan algunos ejemplos adicionales de closures en Python:

Ejemplo 1: Cálculo del área de un círculo utilizando una closure:

«`python
import math

def calcular_area_circulo(pi):
def area(radio):
return pi * math.pow(radio, 2)
return area

area_circulo_pi_3 = calcular_area_circulo(3.14159)
print(area_circulo_pi_3(5)) # Output: 78.53975

area_circulo_pi_4 = calcular_area_circulo(3.14159)
print(area_circulo_pi_4(5)) # Output: 78.53975
«`

En este ejemplo, la función externa `calcular_area_circulo` recibe un argumento `pi` y define una función interna `area` que recibe un argumento `radio`. La función interna calcula el área del círculo utilizando la fórmula `pi * radio^2`. Luego, la función externa retorna la función interna.

Al llamar a la función externa `calcular_area_circulo` con el argumento `3.14159`, se crea una closure que retiene una referencia al valor de `pi`. Luego, al llamar a la closure con el argumento `5`, se calcula el área del círculo utilizando el valor de `pi` y se retorna el resultado.

En este caso, se crean dos closures `area_circulo_pi_3` y `area_circulo_pi_4`, cada una con su propio valor de `pi` independiente. Al llamar a las closures, se calcula el área del círculo utilizando el valor de `pi` correspondiente y se retorna el resultado.

Ejemplo 2: Implementación de un contador utilizando una closure:

«`python
def contador():
count = 0
def incrementar():
nonlocal count
count += 1
return count
return incrementar

contador1 = contador()
print(contador1()) # Output: 1
print(contador1()) # Output: 2
print(contador1()) # Output: 3

contador2 = contador()
print(contador2()) # Output: 1
print(contador2()) # Output: 2
«`

Este ejemplo es similar al ejemplo anterior del contador. La función externa `contador` define una variable `count` y una función interna `incrementar`. La función interna incrementa la variable `count` en `1` cada vez que se llama y retorna el valor actualizado. Al llamar a la función externa `contador`, se crea una closure que retiene una referencia a la variable `count`. Luego, al llamar a la closure, se incrementa el contador y se retorna el valor actualizado.

Recomendado:  Spinner Widget in the Kivy Library of Python: A Guide on How to Use It

En este caso, se crean dos closures `contador1` y `contador2`, cada una con su propio contador independiente. Al llamar a las closures, se incrementa el contador correspondiente y se retorna el valor actualizado.

Beneficios de utilizar closures en Python

El uso de closures en Python puede proporcionar varios beneficios, como:

  • Encapsulación de datos y comportamientos relacionados en un solo lugar.
  • Creación de funciones especializadas que utilizan datos específicos.
  • Implementación de funciones generadoras.
  • Implementación de decoradores.
  • Mantenimiento del estado de una función a lo largo de múltiples llamadas.

Las closures también pueden mejorar la legibilidad y la modularidad del código, ya que permiten agrupar lógica relacionada en una función interna que tiene acceso a las variables de la función externa.

Conclusiones

Una closure en Python es una función interna que tiene acceso a las variables locales de la función en la que fue creada, incluso después de que la función haya terminado de ejecutarse. Las closures se crean cuando una función interna hace referencia a una variable de una función externa. Las closures son útiles para encapsular datos y comportamientos relacionados, crear funciones especializadas, implementar funciones generadoras y decoradores, y mantener el estado de una función a lo largo de múltiples llamadas.

Al comprender y utilizar las closures en Python, se puede aprovechar al máximo el lenguaje y escribir código más modular, legible y eficiente.

Autor

osceda@hotmail.com

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *