Je ne suis pas sûr de la façon précise de formuler la question car il est plus facile de démontrer simplement avec du code. Je voudrais avoir une fonction qui accepte un nombre variable d'un ensemble de 3 arguments obligatoires et 1 facultatifs. A titre d'exemple, matplotlib.pyplot.plot()
peut accepter n'importe quel nombre de (x, y, color)
ensemble de variables. Je voudrais copier ce comportement, mais je ne suis pas sûr de la bonne façon de le faire en utilisant * args ou similaire. Ci-dessous, j'illustre le comportement que je voudrais.Passer un nombre arbitraire d'un ensemble de variables à la fonction Python
myFunc(name, lo, hi, step) # Do something
myFunc(name, lo, hi, step, name2, low2, hi2, step2) # Do something for name and name2
myFunc(name, lo, hi, name2, low2, hi2) # Same as above but use default step for both
La seule façon que je peux penser est en boucle à travers les arguments et effectuer une série de contrôles sur assurez-vous qu'il satisfait le type de (name, lo, hi, step)
et de vérifier si step
est même donné, mais je voudrais savoir s'il y a un moyen plus efficace de le faire.
Edit:
Je voulais que le comportement ci-dessus puisque ma fonction utilise le premier ensemble pour identifier un paramètre et créer une boucle while. S'il reste d'autres ensembles de paramètres, il s'appelle récursivement pour construire une boucle while imbriquée avec les paramètres restants, etc. Si aucun ensemble supplémentaire ne reste, il effectuera une mesure de données, puis reviendra. De cette façon, je peux traverser un espace multidimensionnel arbitrairement grand en utilisant une seule fonction récursive.
Peut-être que vous voulez ** kwargs. Ceux-ci vous permettront des arguments de mots-clés optionnels –
Il y a des parties de l'API de 'matplotlib' que je trouve vraiment horrible - C'est l'une d'entre elles. :-). Dans ce cas, je recommanderais d'avoir la fonction/méthode appelée un nombre de fois avec 3 arguments obligatoires et 1 argument optionnel. . . Cela serait-il possible pour votre cas d'utilisation? – mgilson
Vérifiez ce post: http://stackoverflow.com/questions/3394835/args-and-kwargs – Jaco