Pour passer plusieurs paramètres à une fonction en python
J'ai écrit un script python qui appelle une fonction. Cette fonction prend 7 liste en tant que paramètres à l'intérieur de la fonction, quelque chose comme ceci:
def WorkDetails(link, AllcurrValFound_bse, AllyearlyHLFound_bse,
AlldaysHLFound_bse, AllvolumeFound_bse,
AllprevCloseFound_bse, AllchangePercentFound_bse,
AllmarketCapFound_bse):
où tous les arguments sauf link
sont des listes. Mais ce qui rend mon code assez laid. Je passe ces listes à cette fonction, car la fonction ajoute quelques valeurs dans l'ensemble de ces listes. Comment puis-je faire cela plus lisible pour les autres utilisateurs?
- Trouve-t-il les mêmes choses à chaque liste ou des choses différentes?
Vous devez vous connecter pour publier un commentaire.
fonction de test:
Vous pouvez utiliser plusieurs arguments représentant par
*args
et plusieurs mots clés représentant par**kwargs
et de passer à une fonction:Exemple:
Ensuite utiliser n'importe quel type de données en arguments et autant de paramètres que les mots clés de la fonction. La fonction permet de les détecter et de les séparer pour les arguments et les mots-clés:
De sortie:
Vous pouvez le modifier:
Alors invoquer celle-ci comme:
Et vous obtenez les différentes valeurs de détails par:
Il serait plus robuste pour activer
details
dans un dictionnaire, les noms de variables comme les clés, alors faites votre choix entre un peu plus de lignes de code vs une programmation défensive =pVous pouvez utiliser
*args
si vous n'avez pas besoin d'utiliser des noms de listes:Ou vous pouvez utiliser un dictionnaire
collections.namedtuple
pourrait s'avérer utile.Je pense que l'utilisation de la **kwarg est mieux.
Regardez cet exemple:
Généralement, l'adoption de plus de 3 paramètres à une fonction n'est pas recommandée. Ce n'est pas spécifique à python, mais à la conception de logiciels en général. Vous pouvez en savoir plus sur la façon de réduire le nombre de paramètres passés à une fonction ici.
Suivant le point de vue des réponses précédentes, mais d'un point de vue général, je voudrais ajouter qu'il ya plusieurs façons de rendre votre code plus lisible:
link
,specific_list
,list_type
. En faisant cela, vous pouvez détecter au sein de votreWorkDetails
fonction de la liste que vous avez passé aveclist_type
et ajouter les éléments corrects pour quespecific list
)Espérons que cette aide.
Que vous avez besoin de passer que de nombreuses listes est un signe que votre fonction est de ne pas faire une seule chose et vous devez refactoriser par le casser en petits des fonctions et/ou de le convertir à une classe. Vous pouvez passer des paramètres par mots-clés, ou de passer un nombre arbitraire de paramètres à une fonction, comme décrit par cette page StackOverflow, mais ça va encore être difficile pour les autres de lire et de comprendre si vous avez votre fonction de faire plus d'une chose.