J'essaie d'utiliser les arguments du modèle pour plus de commodité dans un appel de fonction (via les arguments dict et mot-clé) tout en surchargeant certains arguments.Python: dans les arguments d'appel de méthode, remplacer le mot-clé argument
Par exemple, si nous commençons par un mymod module contenant la ligne template_kvps = {'a': 1, 'b': 2}
je peux:
import mymod
def func(**kwargs):
pass
func(**mymod.template_kvps)
alors je peux accéder à mon template_kvps
au sein func()
. Mais je veux être en mesure de passer une valeur différente pour a
avec un minimum de frais généraux. Tout ce que je peux penser est de modifier le dictionnaire avant l'appel de la fonction: kvps = {**template_kvps, 'a': 3}; func(**kvps)
, mais c'est deux fois le nombre de lignes et j'utilise cette fonction plusieurs fois dans environ 1000 scripts de test.
Je voudrais idéalement redéfinir func
afin que je puisse faire sth comme func(**mymod.template_kvps, a=3)
mais comme il est, les erreurs Python avec quelque chose sur les paramètres répétés.
btw Je suis heureux d'envisager de changer le format du modèle kvps. Note ajoutée plus tard Il ya quelques bonnes réponses à ce que j'ai demandé (et j'ai accepté ce que je pense être la meilleure réponse pour ce que j'ai demandé), mais je pense que j'ai demandé une mauvaise chose. Je propose cela est un problème de conception, et si je veux des arguments par défaut comme cela, je pense qu'il serait préférable de créer une méthode d'emballage avec des arguments par défaut au lieu d'un dictionnaire de modèle, comme
def func_template(a=1, b=2):
func(a, b)
func_template(a=3)
Je me demande pourquoi nous tirons tous nos cheveux sur une ligne de code supplémentaire. Je ne vois pas comment c'est un gâchis. –
Comment fonctionne func (mymod.template_kvps) '? Ne devrait-il pas être 'func (** mymod.template_kvps)'? – Artyer
@Artyer, oui, mon erreur, corrigé – joelb