Python でのクロージャとデコレータ

3379 ワード

Funciones anidadas
Son funciones que están creadas dentro de otra función


閉鎖



ネストされた関数のトラベスで変数のスコープを追加する形式です.入れ子になった関数を使用すると、その関数をすぐに使用することができなくなります.

Reglas para tener un 閉鎖
  • Debemos がネストされた関数を使用していません.
  • ネストされた関数は、より優れた有効範囲を参照しています.
  • La función que envuelve la nested debe retornarla también.

  • 例:

    def make_division_by(n):
        """
        This closure returns a function that returns the division of an x number by n
        """
        def division(x):
            return x/n
    
        return division
    
    division_by_3 = make_division_by(3)
    print(division_by_3(18))
    


    El resultado del Closure, lo que se imprime de division_by_3(18) es:

    6.0
    


    デコレータ



    Es una función que recibe como parametro otra función, le añade cosas, y retorna una función diferente.

    def mayusculas(func):
        def envoltura(texto):
            return func(texto).upper()
        return envoltura
    
    @mayusculas
    def mensaje(nombre):
        return f'{nombre}, recibiste un mensaje'
    
    print(mensaje('Cesar'))
    


    Aquí la función mayusculas recibe a la función mensaje y en función envoltura (wrapper) la ejecuta agregandole algo má, en este caso applicandole un upper al string texto y la retorna.
    Al imprimir mensaje('Cesar') lo que obtenemos al final es

    CESAR, RECIBISTE UN MENSAJE