0
votes

Devrais-je utiliser une classe pour partager plusieurs variables entre les fonctions?

J'ai une grosse fonction qui fait un certain nombre de mesures. Une liste de paramètres est lue à partir d'une base de données et de fichiers au début de la fonction. Certains de ces paramètres appartiennent quelque peu ensemble (tels que des limites de mouvement), d'autres sont séparés. Je préférerais ne pas mettre tous les paramètres dans un dictionnaire, même pour le défi.

Pour rendre la fonction plus compacte et moins encombrée, je mettais les requêtes pour tous les paramètres dans une fonction distincte. Cependant, je ne connais pas la meilleure façon de retourner plusieurs variables.

Lorsque vous recherchez mes livres et un débordement de pile, je trouve les options suivantes:

  1. Je pourrais retourner un dict avec toutes les variables, mais je me demande s'il y a une autre façon.
  2. Variables globales: Comme je n'utilise pas les paramètres ailleurs, cela semble une mauvaise pratique.
  3. renvoie un tuple de variables, mais ils ne seraient pas nommés.
  4. La plupart des réponses que j'ai trouvées sur le débordement de pile recommandent de créer une classe. Cela transformerait ma fonction en une classe.

    Je me demande donc, est-ce que cela est considéré comme une bonne pratique: créer une classe (avec seulement deux fonctions) pour quelque chose qui pourrait être fait dans une seule fonction?


1 commentaires

Dans le contexte de l'option 3: Avez-vous déjà essayé NamedTuple < / code> ?


3 Réponses :


0
votes

Une autre option utilise une autre option dict S sur des paramètres de groupe par certains critères.

Par exemple: xxx

et y accéder comme ceci : xxx

Cela a peu de frais généraux (pas une classe entière) et est encore quelque peu lisible.


0 commentaires

1
votes

retourne un tuple; Dans votre fonction d'appel, vous pouvez utiliser Implicit Tuple Déballing

return top_limit, bottom_limit, another_value


0 commentaires

1
votes

Une réponse à une telle question dépend toujours de la complexité.

Mais quand vous dites:

J'ai une grosse fonction qui fait un certain nombre de mesures.

Cela pourrait être une indication de penser à la restructuration.

Je préfère toujours laisser une fonction juste faire une chose simple. Zen of Python nous apprend "Simple est meilleur que complexe" et "complexe vaut mieux que compliqué ".

Dans ce cas, j'utiliserais une classe au lieu d'une fonction trop compliquée.

En règle générale: si votre fonction ou votre méthode dépasse 20 lignes de code ou renvoie plus de deux ou trois paramètres, vous devriez penser à la restructuration. Dans la plupart des cas, vous souhaitez que la fonction soit une "prise de tous les métiers". De temps en temps, ces fonctions explosent et les manipulant de plus en plus compliquées.


2 commentaires

C'est cette restructuration que j'essaie de faire, rendant le code "nettoyeur" tout en améliorant comment coder. La fonction est un cycle de mesure avec de nombreuses étapes qui dépendent parfois de l'autre. Je suis sûr que cela pourrait être beaucoup amélioré, et peut-être une classe est la meilleure solution pour regrouper toutes les variables et toutes les fonctions ....


Souvent, vous pouvez diviser une fonction complexe en petites parties, même si ce n'est qu'un cycle de mesure. Lorsque vous montrez votre code, il est plus facile d'identifier les améliorations. Les variables utilisées plus d'une fois sont de bons candidats pour les variables de classe.