La façon la plus simple d'encapsuler une fonction
func(*args, **kwargs)
... est d'écrire manuellement un wrapper qui appellerait func () à l' intérieur de lui-même:
def wrapper(*args, **kwargs):
# do something before
try:
return func(*a, **kwargs)
finally:
# do something after
En Python, la fonction est un objet, vous pouvez donc passer son nom comme argument d'une autre fonction et le renvoyer. Vous pouvez également écrire un générateur de wrapper pour n'importe quelle fonction anyFunc () :
def wrapperGenerator(anyFunc, *args, **kwargs):
def wrapper(*args, **kwargs):
try:
# do something before
return anyFunc(*args, **kwargs)
finally:
#do something after
return wrapper
Veuillez également noter qu'en Python, lorsque vous ne connaissez pas ou ne voulez pas nommer tous les arguments d'une fonction, vous pouvez vous référer à un tuple d'arguments, qui est indiqué par son nom, précédé d'un astérisque entre parenthèses après le nom de la fonction:
*args
Par exemple, vous pouvez définir une fonction qui prendrait n'importe quel nombre d'arguments:
def testFunc(*args):
print args # prints the tuple of arguments
Python permet une manipulation encore plus poussée des arguments de fonction. Vous pouvez autoriser une fonction à prendre des arguments de mot-clé. Dans le corps de la fonction, les arguments de mot-clé sont conservés dans un dictionnaire. Dans les parenthèses après le nom de la fonction, ce dictionnaire est indiqué par deux astérisques suivis du nom du dictionnaire:
**kwargs
Un exemple similaire qui imprime le dictionnaire des arguments de mot-clé:
def testFunc(**kwargs):
print kwargs # prints the dictionary of keyword arguments