IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Bonne pratique méthode qui renvoie une liste/tuple


Sujet :

Python

  1. #1
    Membre confirmé

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Points : 597
    Points
    597
    Par défaut Bonne pratique méthode qui renvoie une liste/tuple
    Bonjour,

    dans mon code j'ai plusieurs méthodes qui renvoie des tuples ou des listes, j'aimerai savoir quelle est la bonne pratique afin d'éviter des "magics numbers", je pensais à l'utilisation d'un dictionnaire. Est-ce la bonne solution ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    def exemple(self, debut, fin):
        """
        Exemple de méthode qui retourne un tuple
        @param...
        @return Un tuple avec les indices de début, fin et size
        """
        return (debut, fin, start + fin)
     
    dic_exemple = {
                   "debut" : 0,
                   "fin"   : 1,
                   "size"  : 2
                   }
    Si vous utilisez des dictionnaires ou les placez-vous ? Dans la classe ? Dans un fichier externe de "constante".

    Merci d'avances pour vos conseils

  2. #2
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Si j’ai bien compris le problème, il me semble que les namedtuples, du module standard collections, est la solution idéale, non*?

    [EDIT] Tant qu’à faire, petit exemple vite fait*:

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    from collections import namedtuple
     
    def example(start, end):
        """
        Example of a method returning a tuple.
        @param...
        @return A tuple, with start and end indices, and size.
        """
        return (start, end, start + end)
     
    Result = namedtuple("Result", "start, end, size")
     
    res = Result._make(example(-13, 666))
    print(res.start, res.size)

  3. #3
    Membre confirmé

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Points : 597
    Points
    597
    Par défaut
    Une pure merveille exactement ce qu'il me fallait... encore tellement à apprendre

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 453
    Points : 37 049
    Points
    37 049
    Par défaut
    Salut,

    Ce que retourne une fonction fait partie de la définition de son interface.
    En Python, une fonction retourne toujours un objet ou None.

    dans mon code j'ai plusieurs méthodes qui renvoie des tuples ou des listes, j'aimerai savoir quelle est la bonne pratique afin d'éviter des "magics numbers", je pensais à l'utilisation d'un dictionnaire.
    Si l'interface dit: la fonction retourne un itérable il n'y a rien à changer mais vous écrivez:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        return (debut, fin, start + fin)
     
    dic_exemple = {
                   "debut" : 0,
                   "fin"   : 1,
                   "size"  : 2
                   }
    De mon point de vue, la fonction ne retourne pas une liste de nombre mais une structure qui pourrait être mieux décrite par clés/valeurs et effectivement pourquoi pas un "dict" pour emballer cela?

    Mais vous pourriez aussi "emballer" la chose dans l'instance d'une "class" particulière ou un namedtuple (voir module collections).

    Comme cela fait partie de "l'interface", la mise en forme pourra aider à documenter, vérifier, debugger, .... et cela fait sens sur les interfaces "publiques" maintenant pour les interfaces internes, c'est vous qui voyez.

    Bon courage,
    - W

  5. #5
    Membre confirmé

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Points : 597
    Points
    597
    Par défaut
    Oui deux nouvelles bonnes idées (class, retour d'un dico), merci pour les précisions.

    C'est vrai que j'avais jamais pensé à retourner un dictionnaire depuis une fonction...

    Il faut vraiment que je lises quelques pages de docs/tuto

    Merci

  6. #6
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Citation Envoyé par manticore Voir le message
    C'est vrai que j'avais jamais pensé à retourner un dictionnaire depuis une fonction...
    Aïe… Oui, en effet, si tu peux modifier tes fonctions, c’est nettement plus simple de retourner un dict ou un objet… J’avais suggéré namedtuple, partant du principe que tu avais affaire à une interface non modifiable*!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/01/2012, 10h28
  2. Réponses: 6
    Dernier message: 28/04/2011, 15h19
  3. Réponses: 1
    Dernier message: 19/03/2008, 11h05
  4. Requête qui renvoie une liste de données
    Par fougna dans le forum Langage SQL
    Réponses: 5
    Dernier message: 02/08/2007, 13h05
  5. Fonction qui renvoie une liste
    Par la_praline dans le forum GTK+ avec C & C++
    Réponses: 20
    Dernier message: 20/04/2007, 22h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo