Python Language
Funciones parciales
Buscar..
Introducción
Como probablemente sepa si vino de la escuela de OOP, especializarse en una clase abstracta y usarla es una práctica que debe tener en cuenta al escribir su código.
¿Qué pasaría si pudieras definir una función abstracta y especializarla para crear diferentes versiones de ella? Piensa que es una especie de función de herencia donde se vinculan parámetros específicos para que sean confiables para un escenario específico.
Sintaxis
- parcial (función, ** params_you_want_fix)
Parámetros
Param | detalles |
---|---|
X | el número a elevar |
y | el exponente |
aumento | La función a especializarse. |
Observaciones
Como se indica en el documento de Python, functools.partial :
Devuelva un nuevo objeto parcial que, cuando se le llame, se comportará como una función llamada con los argumentos posicionales, argumentos y palabras clave de palabras clave. Si se proporcionan más argumentos a la llamada, se anexan a args. Si se proporcionan argumentos de palabras clave adicionales, amplían y anulan las palabras clave.
Consulte este enlace para ver cómo se puede implementar parcial .
Elevar el poder
Supongamos que queremos elevar x a un número y .
Escribirías esto como:
def raise_power(x, y):
return x**y
¿Qué pasa si su valor y puede asumir un conjunto finito de valores?
Supongamos que y puede ser uno de [3,4,5] y digamos que no quiere ofrecer al usuario final la posibilidad de usar dicha función, ya que es muy computacional. De hecho, verificará si se proporciona y asume un valor válido y reescribirá su función como:
def raise(x, y):
if y in (3,4,5):
return x**y
raise NumberNotInRangeException("You should provide a valid exponent")
¿Sucio? Usemos el formulario abstracto y lo especialicemos en los tres casos: implementémoslo parcialmente .
from functors import partial
raise_to_three = partial(raise, y=3)
raise_to_four = partial(raise, y=4)
raise_to_five = partial(raise, y=5)
¿Qué pasa aquí? Hemos fijado los parametros y y definimos tres funciones diferentes.
No es necesario usar la función abstracta definida anteriormente (puede hacerla privada ), pero puede usar funciones aplicadas parciales para tratar de elevar un número a un valor fijo.