La forma más sencilla de ajustar una función.
func(*args, **kwargs)
... es escribir manualmente un contenedor que llame a func () dentro de sí mismo:
def wrapper(*args, **kwargs):
# do something before
try:
return func(*a, **kwargs)
finally:
# do something after
En Python, la función es un objeto, por lo que puede pasar su nombre como argumento de otra función y devolverlo. También puede escribir un generador de contenedor para cualquier función anyFunc () :
def wrapperGenerator(anyFunc, *args, **kwargs):
def wrapper(*args, **kwargs):
try:
# do something before
return anyFunc(*args, **kwargs)
finally:
#do something after
return wrapper
Tenga en cuenta también que en Python cuando no sabe o no quiere nombrar todos los argumentos de una función, puede referirse a una tupla de argumentos, que se denota por su nombre, precedida por un asterisco entre paréntesis después el nombre de la función:
*args
Por ejemplo, puede definir una función que tome cualquier número de argumentos:
def testFunc(*args):
print args # prints the tuple of arguments
Python proporciona una manipulación aún mayor en los argumentos de la función. Puede permitir que una función tome argumentos de palabras clave. Dentro del cuerpo de la función, los argumentos de las palabras clave se encuentran en un diccionario. Entre paréntesis después del nombre de la función, este diccionario se denota con dos asteriscos seguidos del nombre del diccionario:
**kwargs
Un ejemplo similar que imprime el diccionario de argumentos de palabras clave:
def testFunc(**kwargs):
print kwargs # prints the dictionary of keyword arguments