Je cherche un moyen de décorer une fonction python arbitraire, de sorte qu'une autre fonction soit appelée à la place de l'original, avec tous les paramètres passés en liste ou en dict.Comment remplacer la fonction Python tout en supportant tous les paramètres passés
Plus précisément, quelque chose comme ça (où f est une fonction, et replacement_f prend une liste et un dict):
def replace_func(f, replacement_f):
def new_f(*args, **kwargs):
replacement_f(args, kwargs)
return new_f
Cependant, je ne peux pas faire référence à l'intérieur replacement_f
new_f
. Et je ne peux pas utiliser l'astuce standard de passer replacement_f
à new_f
comme valeur par défaut pour un paramètre différent, parce que j'utilise les listes d'arguments variables *args
et **kwargs
.
L'emplacement où la fonction d'origine est appelée ne peut pas changer et accepte les paramètres de position et de nom.
Je crains que ce ne soit pas très clair, mais je suis heureux de clarifier si nécessaire.
Merci
vous avez raison: ce n'est pas clair. Je pense que vous n'avez pas besoin de changer l'appel de la fonction d'origine, mais plutôt sa définition. Si vous ne pouvez pas changer cela, vous ne pouvez probablement pas le décorer non plus. – hop
merci à tous. Je rendais cela beaucoup trop difficile, je peux juste remplacer la fonction sans tous les args, ** kwargs tracas. Aussi, je pense que les règles de portée ont changé depuis Python 1.x, maintenant je peux référencer une variable de la fonction externe dans la définition de la fonction interne. – Mzzzzzz