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_decorator
es una función invocable, agregará un código en la parte superior de alguna otra función invocable, hello_decorator
funció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