Funciones de orden superior en Python

Una función se llama función de orden superior si contiene otras funciones como parámetro o devuelve una función como salida, es decir, las funciones que operan con otra función se conocen como funciones de orden superior. Vale la pena saber que esta función de orden superior también es aplicable para funciones y métodos que toman funciones como parámetro o devuelven una función como resultado. Python también admite los conceptos de funciones de orden superior.

Propiedades de las funciones de orden superior:

  • Una función es una instancia del tipo de objeto.
  • Puede almacenar la función en una variable.
  • Puede pasar la función como un parámetro a otra función.
  • Puede devolver la función desde una función.
  • Puedes almacenarlos en estructuras de datos como tablas hash, listas,…

Funciones como objetos

En Python, una función se puede asignar a una variable. Esta asignación no llama a la función, sino que se crea una referencia a esa función. Considere el siguiente ejemplo, para una mejor comprensión.

Ejemplo:

# Python program to illustrate functions 
# can be treated as objects 
def shout(text): 
    return text.upper() 
    
print(shout('Hello')) 
    
# Assigning function to a variable
yell = shout 
    
print(yell('Hello'))

Producción:

HELLO
HELLO

En el ejemplo anterior, un objeto de función al que hace referencia gritar crea un segundo nombre que lo señala, gritar.

Pasar la función como argumento a otra función

Las funciones son como objetos en Python, por lo tanto, se pueden pasar como argumento a otras funciones. Considere el siguiente ejemplo, donde hemos creado una función saludar que toma una función como argumento.

Ejemplo:

# Python program to illustrate functions 
# can be passed as arguments to other functions 
def shout(text): 
    return text.upper() 
    
def whisper(text): 
    return text.lower() 
    
def greet(func): 
    # storing the function in a variable 
    greeting = func("Hi, I am created by a function \
    passed as an argument.") 
    print(greeting)  
    
greet(shout) 
greet(whisper)

Producción:

HI, I AM CREATED BY A FUNCTION PASSED AS AN ARGUMENT.
hi, i am created by a function passed as an argument.

función de retorno

Como las funciones son objetos, también podemos devolver una función desde otra función. En el siguiente ejemplo, la función create_adder devuelve la función de sumador.

Ejemplo:

# Python program to illustrate functions 
# Functions can return another function 
    
def create_adder(x): 
    def adder(y): 
        return x + y 
    
    return adder 
    
add_15 = create_adder(15) 
    
print(add_15(10))

Producción:

25

Decoradores

Los decoradores son el uso más común de funciones de orden superior en Python. Permite a los programadores modificar el comportamiento de la función o clase. Los decoradores nos permiten envolver otra función para extender el comportamiento de la función envuelta, sin modificarla permanentemente. En Decorators, las funciones se toman como argumento en otra función y luego se llaman dentro de la función contenedora.

Sintaxis:

@gfg_decorator
def hello_decorator(): 
    .
    .
    .

El código anterior es equivalente a –


def hello_decorator(): 
    .
    .
    .
      
hello_decorator = gfg_decorator(hello_decorator)

En el código anterior, gfg_decoratores una función invocable, agregará un código en la parte superior de alguna otra función invocable, hello_decoratorfunción y devolverá la función contenedora.

Ejemplo:

# defining a decorator 
def hello_decorator(func): 
    
    # inner1 is a Wrapper function in  
    # which the argument is called 
        
    # inner function can access the outer local 
    # functions like in this case "func" 
    def inner1(): 
        print("Hello, this is before function execution") 
    
        # calling the actual function now 
        # inside the wrapper function. 
        func() 
    
        print("This is after function execution") 
            
    return inner1 
    
    
# defining a function, to be called inside wrapper 
def function_to_be_used(): 
    print("This is inside the function !!") 
    
    
# passing 'function_to_be_used' inside the 
# decorator to control its behavior 
function_to_be_used = hello_decorator(function_to_be_used) 
    
    
# calling the function 
function_to_be_used() 

Producción:

Hello, this is before function execution
This is inside the function !!
This is after function execution

Nota: Para obtener más información, consulte Decoradores en Python .

Publicación traducida automáticamente

Artículo escrito por nikhilaggarwal3 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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