J'ai plusieurs couches d'appels de fonction, en passant autour d'un dictionnaire commun des arguments de mots clés:arguments de mot-clé Python
def func1(**qwargs):
func2(**qwargs)
func3(**qwargs)
je voudrais fournir des arguments par défaut dans certains des appels de fonctions ultérieures, quelque chose comme ça :
def func1(**qwargs):
func2(arg = qwargs.get("arg", default), **qwargs)
func3(**qwargs)
Le problème avec cette approche est que si arg est à l'intérieur qwargs, un TypeError est élevé avec « obtenu plusieurs valeurs pour argument mot-clé ».
Je ne veux pas définir qwargs ["arg"] par défaut, car alors func3 obtient cet argument sans garantie. Je pourrais faire un copy.copy des qwargs et mettre "arg" dans la copie, mais qwargs pourrait avoir de grandes structures de données dedans et je ne veux pas les copier (peut-être que copy.copy ne le ferait pas, seulement copy.deepcopy ?).
Quelle est la chose pythonique à faire ici?
'qwargs' ressemble à des données et' func * 'ressemble à des méthodes. Avez-vous pensé à envelopper les deux dans une classe? Si vous faites cela, alors la signature de 'func2' pourrait être simplifiée à quelque chose comme' func2 (self, arg = default) '... – unutbu