J'écris un décorateur qui doit appeler d'autres fonctions avant l'appel de la fonction qu'il décore. La fonction décorée peut avoir des arguments de position, mais les fonctions appelées par le décorateur ne peuvent accepter que des arguments de mots-clés. Est-ce que quelqu'un a un moyen pratique de convertir les arguments positionnels en arguments mot-clé?Python convertir args en kwargs
Je sais que je peux obtenir une liste des noms de variables de la fonction décorée:
>>> def a(one, two=2):
... pass
>>> a.func_code.co_varnames
('one', 'two')
Mais je ne peux pas comprendre comment dire ce qui a été passé en positionnelle et ce qui était comme mot-clé.
Mon décorateur ressemble à ceci:
class mydec(object):
def __init__(self, f, *args, **kwargs):
self.f = f
def __call__(self, *args, **kwargs):
hozer(**kwargs)
self.f(*args, **kwargs)
est-il un moyen autre que la simple comparaison kwargs et co_varnames, en ajoutant à kwargs quoi que ce soit pas là-dedans, et espérer le meilleur?
Pourquoi vous vous avez besoin de savoir ce que args étaient positionnel? –
Parce que j'ai besoin de les convertir en kwargs pour appeler la fonction hozer. Cette fonction accepte uniquement kwargs, mais elle doit connaître tous les arguments appelés à l'origine. Donc, selon que les gens appellent ou non la fonction décorée avec des arguments positionnels ou nommés, la fonction hozer peut ou non obtenir toutes les données dont elle a besoin. – jkoelker