Las funciones parciales de Python son invocadas por el usuario mediante el módulo functools.

aplicación parcial

Cuando una función se ejecuta, debe llamarse con todos los parámetros necesarios. Sin embargo, a veces los parámetros pueden conocerse antes de que la función sea llamada. En este caso, uno o más parámetros de una función pueden estar disponibles de antemano, de modo que la función pueda llamarse con menos parámetros.

La función parcial toma la función objetivo como primer parámetro de la función partial(), y los parámetros de la función original se pasan sucesivamente como parámetros posteriores de partial(), a menos que se utilicen argumentos de palabra clave.

Puede que la descripción verbal no permita entender cómo se usan las funciones parciales, así que pongamos un ejemplo habitual para explicarlo. En este ejemplo, implementamos una función de módulo que, para el entero 100, obtiene el resto de 100 % m para diferentes valores de m.

from functools import partial
 
def mod( n, m ):
  return n % m
 
mod_by_100 = partial( mod, 100 )
 
print mod( 100, 7 )  # 2
print mod_by_100( 7 )  # 2

Como los ejemplos anteriores suelen usar la suma o la multiplicación para explicar, no se puede apreciar la cuestión de la posición de los parámetros en las funciones parciales, lo que fácilmente da la falsa impresión de que el segundo parámetro de partial también es el segundo parámetro de la función original. Por eso, aquí elijo mod para explicarlo.

En el caso de los argumentos de palabra clave, no es necesario ceñirse a la posición ni al número de parámetros de la función original. Veamos a continuación otro ejemplo, que trata de cómo realizar conversiones entre diferentes bases numéricas.

from functools import partial
 
bin2dec = partial( int, base=2 )
print bin2dec( '0b10001' )  # 17
print bin2dec( '10001' )  # 17
 
hex2dec = partial( int, base=16 )
print hex2dec( '0x67' )  # 103
print hex2dec( '67' )  # 103

Estas aplicaciones de las funciones parciales parecen sencillas, pero tienen una gran utilidad: pueden aplicar muy bien el principio DRY y ahorrar costos de programación.

Vía Pythoner

Enlace de este artículo: http://www.pythoner.com/54.html