8
votes

Façon de passer plusieurs paramètres à une fonction de Python

J'ai écrit un script Python qui appelle une fonction. Cette fonction prend 7 liste comme paramètres à l'intérieur de la fonction, quelque chose comme ceci: xxx

où tous les arguments sauf lien sont des listes. Mais cela fait que mon code a l'air assez moche. Je passe ces listes à cette fonction car la fonction ajoute peu de valeurs dans toutes ces listes. Comment puis-je le faire de manière plus lisible pour les autres utilisateurs?


1 commentaires

Ajoutez-t-il les mêmes choses à chaque liste ou différentes choses?


6 Réponses :


2
votes

Vous pouvez utiliser * args si vous n'avez pas besoin d'utiliser des noms pour vos listes: xxx

ou vous pouvez utiliser un dictionnaire < Pré> xxx


2 commentaires

rouge à lèvres sur un cochon, l'OP devrait définir une nouvelle classe qui encapsule les paramètres


Dans ces situations Collections.NameDTupple pourrait être utile.



4
votes

Vous pouvez le changer à: xxx

puis l'invoque comme suit: xxx

et vous obtiendriez les différentes valeurs hors détails. par: xxx

Il serait plus robuste de tourner Détails dans un dictionnaire, avec les noms de variable comme clé, alors prenez votre choix entre quelques-unes Plus de lignes de code vs. Programmation défensive = p


0 commentaires

1
votes

Je pense que l'utilisation de ** kwarg est meilleure. Regardez cet exemple: xxx


0 commentaires

0
votes

généralement, passant plus de 3 paramètres à une fonction n'est pas recommandé. Ce n'est pas spécifique à Python, mais à la conception logicielle en général. Vous pouvez en savoir plus sur la manière de réduire le nombre de paramètres passés à une fonction ici .

Suivre la perspective des réponses précédentes, mais d'un point de vue plus général, je voudrais ajouter qu'il existe plusieurs façons de rendre votre code plus lisible:

  • Pour diviser votre fonction dans des plus simples qui ont moins d'arguments (définir une fonction qui prend votre variable link , spécifique_list , list_type . par Faire cela, vous pouvez détecter dans votre Fonction de WorkDétails Quelle liste que vous avez passée avec list_type et ajoutez les éléments corrects à cette liste spécifique )
  • Pour créer une structure d'objet de paramètre / une structure de données passée à votre fonction (voici les réponses précédentes suggérées à l'aide de Listes , Dictionnaires ...)

    J'espère que cette aide.


0 commentaires

0
votes

Que vous devez transmettre que de nombreuses listes sont un signe que votre fonction ne fait pas une seule chose et que vous devez le refroidir en la rompant dans des fonctions plus petites et / ou la convertir en une classe. Vous pouvez passer des paramètres en tant que mots-clés ou transmettre un nombre arbitraire de paramètres à une fonction, comme décrit par Cette page Stackoverflow , mais il sera toujours difficile pour les autres de lire et de comprendre si vous avez votre fonction faire plus d'une chose.


0 commentaires

13
votes

Fonction de test:

Vous pouvez utiliser plusieurs arguments représentés par * args et plusieurs mots-clés représentés par ** kwargs et passant à une fonction: xxx

exemple:

Utilisez tout type de données comme arguments et autant de paramètres que de mots clés pour le fonction. La fonction les détectera automatiquement et les séparez-les vers des arguments et des mots-clés: xxx

sortie: xxx


0 commentaires