decorador call() en Python

Los decoradores de Python son características importantes del lenguaje que permiten a un programador modificar el comportamiento de una clase. Estas características se agregan funcionalmente al código existente. Este es un tipo de metaprogramación cuando el programa se modifica en tiempo de compilación. Los decoradores se pueden usar para inyectar código modificado en funciones o clases. Los decoradores permiten modificar el programa para agregar cualquier código que tenga un papel especial que desempeñar. Los decoradores se llaman antes de la definición de la función que ha decorado.

El uso de decoradores podría explicarse con el siguiente ejemplo. Supongamos que escribimos un programa para «Decorar» una función usando otra función. el código va como:

# Code to explain Decorators
def decorating(function):
    def item():
        print("The function was decorated.")
        function()
    return item
  
def my_function():
    print("This is my function.")
  
my_function()
  
decorate = decorating(my_function)
decorate()

Producción

This is my function.
The function was decorated.
This is my function.

En primer lugar, aparece «Esta es mi función» debido a la llamada a la función my_function(). El segundo conjunto de resultados se debió a la función de decoración.

Lo mismo también se puede hacer usando decoradores. El siguiente código lo explica. Tenga en cuenta que la declaración de decoración se define por encima de la función que se va a decorar.

# Code to implement the usage
# of decorators
def decorating(function):
    def item():
        print("The function was decorated.")
        function()
    return item
  
# using the "@" sign to signify 
# that a decorator is used. 
@decorating
def my_function():
    print("This is my function.")
      
# Driver's Code
my_function()

Producción

The function was decorated.
This is my function.

El decorador call()

El decorador call() se usa en lugar de las funciones auxiliares . En python, o en cualquier otro idioma, usamos funciones auxiliares por tres motivos principales:

  1. Identificar el propósito del método.
  2. La función auxiliar se elimina tan pronto como se completa su trabajo. Y
  3. El propósito de la función auxiliar coincide con el de la función decoradora.

El siguiente ejemplo ilustrará la importancia del método decorador de llamadas. En este ejemplo, estaríamos construyendo una lista de los dobles de los primeros números «n», usando una función auxiliar.
El código es el siguiente:

# Helper function to build a
# list of numbers
def list_of_numbers(n):
    element = []
    for i in range(n):
        element.append(i * 2)
    return element
   
list_of_numbers = list_of_numbers(6)
   
# Output command
print(len(list_of_numbers),
      list_of_numbers[2])

Producción

6, 4

El código anterior también podría escribirse usando el decorador call():

# Defining the decorator function
def call(*argv, **kwargs):
    def call_fn(function):
        return function(*argv, **kwargs)
    return call_fn
  
# Using the decorator function
@call(6)
def list_of_numbers(n):
    element = []
    for i in range(n):
        element.append(i * 2)
    return element
  
# Output command
print(len(list_of_numbers),
      list_of_numbers[2])

Producción

6, 4

Como se observa, la salida es la misma que antes, lo que significa que el decorador call() funciona casi exactamente como las funciones auxiliares.

Publicación traducida automáticamente

Artículo escrito por muskangupta13 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 *