Función parcial de Python Functools
Functools es el marco estándar que se usa en Python cuando se trabaja con funciones de orden superior que actúan sobre otras funciones o las devuelven, y ayudan a extender o usar las funciones sin reescribirlas. El uso de Functools hace que el código sea legible y fácil de mantener con alta eficiencia.
Esta biblioteca contiene dos funciones principales: parcial
y método parcial
. El método parcial
es un descriptor de método no invocable de una función ya definida para argumentos específicos y devuelve un nuevo descriptor de método parcial
.
Echemos un vistazo a la función parcial()
.
Utilice la función parcial()
de Functools en Python
La función parcial()
es una función de orden superior que toma una función como entrada y devuelve una función que puede usarse en un programa como otras funciones. Cuando hay una función con muchos argumentos, pero necesitamos cambiar solo uno o dos argumentos cada vez que usamos esa función, la función parcial()
, que viene con la biblioteca Functools, ayuda en tales situaciones.
Con la ayuda de la función parcial()
, podemos congelar un número específico de argumentos de una función y crear uno nuevo simplificado para devolver un nuevo objeto parcial()
con argumentos posicionales y palabras clave. Por lo tanto, nos impide reescribir la función original.
En general, parcial()
es una herramienta útil, especialmente al aplicar varias entradas a un solo objeto o envolver uno de los argumentos de la función para que sea constante. Entonces, el resultado final de usar la función parcial()
imprimirá un código elegante, legible y reutilizable.
Antes de utilizar la función parcial()
, debemos importarla desde la biblioteca Functools. Veamos cómo implementamos la función.
from functools import partial
Como hemos importado la biblioteca parcial
usando el código anterior, podemos usar el comando parcial
como se muestra a continuación. Luego podemos llamar a la función parcial()
como queramos, y genera una función similar a la función definida junto con un valor fijo.
A continuación se muestra la función parcial()
estandarizada y sus atributos.
partial(func, /, *args, **keywords)
La función parcial
consta de tres atributos principales: función, argumentos y palabras clave.
partial.func
(nombre de la función): un objeto invocable o una función que devuelve el nombre y la dirección hexadecimal de la función principal.partial.args
(argumentos posicionales) - Este atributo devuelve los argumentos preasignados a la funciónparcial()
.partial.keyword
(argumentos de palabras clave): este atributo devuelve las palabras clave preasignadas a la funciónparcial()
.
Definamos un ejemplo usando la función parcial()
y sus atributos.
Código completo:
from functools import partial
# original function
def multiply(a, b):
return a * b
# partial function to multiply a as 2
multiplication1 = partial(multiply, 2)
print(multiplication1(4))
# partial function to multiply b as 7
multiplication2 = partial(multiply, b=7)
print(multiplication2(3))
# simple multiply function with two variables
print(multiply(5, 2))
# partial function with two values and multiply function
multiplication3 = partial(multiply, 2, 5)
print(multiplication3())
# defining some attributes in multiplication1, multiplication2 multiplication3
print("Function used in multiplication1 :", multiplication1.func)
print("Keywords for multiplication2 :", multiplication2.keywords)
print("Arguments for multiplication3 :", multiplication3.args)
Producción:
Al principio, importamos la función parcial()
de functools
y definimos una función llamada multiply()
con dos variables como a
y b
. Esta función multiplicar
multiplica dos números (a,b)
.
from functools import partial
def multiply(a, b):
return a * b
En el siguiente fragmento de código, se llama a la función parcial()
y genera un objeto de función multiplicar()
junto con un valor fijo de 2
. Aquí, la función parcial()
llama a multiplicar()
con a
como 2
.
Al imprimir, asigna 4
por b
e imprime el resultado como 8
.
multiplication1 = partial(multiply, 2)
print(multiplication1(4))
Aquí, cuando se llama a la función parcial()
, imprime la función multiplicar()
y el valor asignado a b
como 3.
. Ha especificado el valor de la variable b
saltándose el parámetro de la función original.
Al imprimir, ha definido un valor para a
como 3
y muestra la salida como 21
.
multiplication2 = partial(multiply, b=7)
print(multiplication2(3))
La función parcial()
no es imprescindible cuando se llama a la función con valores para dos variables. Como de costumbre, toma 5
por a
, 2
por b
, e imprime el resultado como 10
.
print(multiply(5, 2))
Como la función original tiene dos parámetros al llamar a la función parcial()
, no será un problema, y toma multiplicar()
con a
como 2
y b
como 5
. Luego, muestra el resultado como 10
.
multiplication3 = partial(multiply, 2, 5)
print(multiplication3())
El siguiente fragmento de código muestra la función utilizada en la función multiplicación1
, las palabras clave en multiplicación2
y los argumentos en multiplicación3
, respectivamente. Entonces, la función utilizada en multiplicación1
es multiplicar()
, y su valor hexadecimal es 000001E523A6E4C0
.
En multiplicación2
, hemos utilizado {'b': 7}
como palabras clave mientras que 2, 5
son los argumentos utilizados en multiplicación3
.
print("Function used in multiplication1 :", multiplication1.func)
print("Keywords for multiplication2 :", multiplication2.keywords)
print("Arguments for multiplication3 :", multiplication3.args)
Conclusión
Este artículo discutió la función parcial()
de la biblioteca functools
. Como viste en los ejemplos anteriores, usar la función parcial()
hace que nuestro código sea más legible, elegante y rápido.
Si encuentra una función que congela uno o más argumentos, la función parcial()
será la mejor para esa situación.
Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.