Funciones anidadas en Python

Manav Narula 10 octubre 2023
Funciones anidadas en Python

Una función es un bloque de código que se puede llamar una y otra vez en un programa. Puede aceptar diferentes argumentos y puede devolver algún valor útil. En todos los lenguajes de programación, tenemos funciones integradas y funciones definidas por el usuario.

En este tutorial, aprenderemos cómo crear y usar funciones anidadas en Python.

La mayoría de los lenguajes admiten el uso y la creación de funciones anidadas. Como sugiere el nombre, una función anidada es una función dentro de una función. La función anidada en el interior se llama función interior y la función envolvente se llama función exterior.

En el siguiente código, creamos una función anidada básica.

def outer_f(s):
    def inner_f(s):
        print(s)

    inner_f(s)


outer_f("Nested")

Producción :

Nested

Usando el ejemplo anterior, podemos tener una pequeña idea sobre el uso de funciones anidadas. Se pueden utilizar para ocultar una función del mundo exterior e implementar la encapsulación de datos.

Otra cosa que debe saber es que la función anidada puede usar la variable usada en la función externa. Estas variables se denominan no locales. Las funciones anidadas pueden acceder a ellas, pero si necesitamos modificarlas, tenemos que usar la palabra clave nonlocal.

Veamos el siguiente ejemplo.

def outer_f():
    s = 5

    def inner_f():
        nonlocal s
        s = s + 1
        return s

    return inner_f()


print(outer_f())

Producción :

6

Aquí no podríamos modificar la variable s sin usar la palabra clave nonlocal.

Ahora imagina si la función anidada devuelve algún valor. Esto nos lleva a otra característica útil de las funciones anidadas y que son las funciones de cierre. Estas funciones se crean dinámicamente utilizando funciones anidadas. Puede ser una forma elegante y concisa de implementar el ocultamiento de datos y usarlo como una alternativa para las clases.

Consulte el siguiente código.

def incrementer(x):
    def inc(y):
        return x + y

    return inc


by4 = incrementer(4)
by5 = incrementer(5)

print(by4(5), by5(5))

Producción :

9 10

Ahora, en el código anterior, creamos un método dinámico para incrementar un número. by4 y by5 son las dos funciones de cierre creadas mediante la función anidada. Esto se debe principalmente a la capacidad de las funciones anidadas para conservar su estado. Puede ser una alternativa decente a las clases y variables globales cuando no hay demasiados atributos involucrados. Podemos averiguar si una función es un cierre usando el atributo __closure__. Todas las funciones tienen este atributo y devuelve algunos objetos de celda cuando se usa con una función de cierre.

Las funciones anidadas también se utilizan para funciones de decorador. Las funciones de decorador usan un objeto invocable como una clase, función y devuelven otro objeto. Usamos el signo @ para usar un decorador antes de cualquier objeto invocable. De esta forma, tomamos el objeto invocable como argumento de la función decoradora y lo usamos.

Creamos una función decoradora muy simple para entender esto mejor en el siguiente ejemplo.

def dec(func):
    def inner():
        print("Hello")
        func()

    return inner


@dec
def world():
    print("world")


world()

Producción :

Hello
world

En el ejemplo anterior, creamos una función decoradora simple llamada dec(), que decora la función world() usándola como argumento e imprimiendo un mensaje adicional.

Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

Artículo relacionado - Python Function