J'ai une fonction Python qui prend plusieurs arguments. Certains de ces arguments pourraient être omis dans certains scénarios.
def some_function (self, a, b, c, d = None, e = None, f = None, g = None, h = None):
#code
Les arguments à d
travers h
sont des chaînes qui ont chacune des significations différentes. Il est important que je puisse choisir les paramètres facultatifs à passer dans n'importe quelle combinaison. Par exemple,, (a, b, C, d, e)
ou (a, b, C, g, h)
, ou (a, b, C, d, e, f
, ou tous (ce sont mes choix).
Ce serait formidable si je pouvais surcharger la fonction - mais j'ai lu que Python ne prend pas en charge la surcharge. J'ai essayé d'insérer certains des arguments int requis dans la liste - et j'ai obtenu une erreur de discordance d'argument.
En ce moment, j'envoie des chaînes vides à la place des premiers arguments manquants en tant qu'espaces réservés. Je voudrais pouvoir appeler une fonction en utilisant simplement des valeurs réelles.
Y a-t-il un moyen de faire ça? Puis-je transmettre une liste au lieu de la liste d'arguments?
En ce moment, le prototype utilisant des ctypes ressemble à ceci:
_fdll.some_function.argtypes = [c_void_p, c_char_p, c_int, c_char_p, c_char_p, c_char_p, c_char_p, c_char_p]
Réponses:
Essayez d' appeler comme:
obj.some_function( '1', 2, '3', g="foo", h="bar" )
. Après les arguments positionnels requis, vous pouvez spécifier des arguments facultatifs spécifiques par nom.la source
Utilisez simplement le
*args
paramètre, qui vous permet de passer autant d'arguments que vous le souhaitez après votrea,b,c
. Il faudrait ajouter de la logique à la carteargs
->c,d,e,f
mais c'est une "façon" de surcharger.Et il affichera les valeurs de
c,d,e,f
De même, vous pouvez utiliser l'
kwargs
argument, puis vous pouvez nommer vos paramètres.Et puis
kwargs
aurait un dictionnaire de tous les paramètres qui sont des valeurs clés aprèsa,b
la source
c = kwargs.get('c', None)
sert la déclaration ? Est-il requis dans toutes les fonctions qui ont des arguments optionnels? Dans votre code, vous n'aviez que 2 arguments optionnels. Et si l'utilisateur veut dire un autre argumente
? Comment puis-je modifier votre exemple de code pour un nombre inconnu d'arguments optionnels, par exempledef my_func(a, b, *args, **kwagars): obj = <do something with a & b> obj.add(c) obj.add(d) continue obj.add(for e, f, g...)
:? Dois-je inclurec = kwargs.get('c', None) etc
avant de faire leobj.add(c, d, ...)
?