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 :

Combinaison des paramètres : python recommande les opérateurs logiques ou une chaîne de caractères ? [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 12
    Par défaut Combinaison des paramètres : python recommande les opérateurs logiques ou une chaîne de caractères ?
    Bonjour,

    J'ai besoin d'utiliser un mécanisme de constantes qui définissent la ou les valeurs possibles d'un paramètre d'une classe pour un programme en python et je me demande quel est le type qui serait le plus python-friendly de leur donner.

    Je m'explique:
    Ces constantes sont combinables, je peux avoir besoin d'en donner plusieurs en même temps.
    en C j'aurais fait un truc du genre :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const int CONST_A=1
    const int CONST_B=2
    const int CONST_C=4
    const int CONST_D=8
    et lors du passage de la constante j'aurais donné ma_val = CONST_A || CONST_C, puis lors de l'évaluation de chacun des états possibles de cette constante, j'aurais testé ... if ma_val && CONST_A then ...

    Mais en python je suis tenté de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CONST_A = 'a'
    CONST_B = 'b'
    CONST_C = 'c'
    CONST_D = 'd'
    d'affecter avec ma_val = CONST_A + CONST_C et de tester ... if CONST_C in ma_val : ...

    Je n'arrive pas à trouver quelles seraient les recommandations à ce sujet. La première solution avec des expressions booléennes, adaptée bien entendu, est je pense la plus économe en terme de manipulations par l'interpréteur/compilateur, mais la seconde parait plus dans la philosophie python.

    Est-ce que quelqu'un aurait un avis sur choix utiliser m'expliquant pourquoi ?
    Merci

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Salut,

    Citation Envoyé par miq75 Voir le message
    Est-ce que quelqu'un aurait un avis sur choix utiliser m'expliquant pourquoi ?
    Il faut distinguer deux sujets.
    Si on parle d'ensemble de valeurs 1, 2, 3, 4 ou a, b, c, d, le plus "naturel" serait d'utiliser des ensembles (qui existent en Python avec les set).
    Et si le programme Python sera plus lisible ou plus facile à écrire en utilisant des "set", on utilisera des "set" (qui seront en général plus performants que des séquences).

    Plus tard, lorsque le programme fonctionne et qu'il y a un intérêt à en améliorer les performances peut être qu'il sera intéressant d'utiliser une représentation moins gourmande en mémoire / cpu /...

    note: Python supporte des opérations "booléennes" sur les entiers (comme le langage C). Si cela vous est plus familier utilisez les: ce sera plus facile à lire et à écrire pour vous.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 12
    Par défaut
    Merci pour cette réponse claire et précise.

    Du coup c'est bien ce que je pensais, si la priorité est donnée à la lisibilité, alors les Set, et si elle est donnée à l'efficacité, alors les booléens.

    En l'occurrence j'ai prévu d'utiliser des string et des caractères parce que j'ai besoin aussi d'ordonner la résolution de ce dont dépendent ces paramètres. Mais du coup, entre une chaîne de caractères et une liste, que je vais pouvoir utiliser de la même façon et qui sont toute deux ordonnées contrairement à un set, existe t'il une recommandation d'usage ?

    Merci encore !

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Salut,

    Citation Envoyé par miq75 Voir le message
    En l'occurrence j'ai prévu d'utiliser des string et des caractères parce que j'ai besoin aussi d'ordonner la résolution de ce dont dépendent ces paramètres. Mais du coup, entre une chaîne de caractères et une liste, que je vais pouvoir utiliser de la même façon et qui sont toute deux ordonnées contrairement à un set, existe t'il une recommandation d'usage ?
    Dans une séquence, il y a l'ordre donné par les indices croissants i.e. pour 'cba', le premier caractère est 'c', le 2nd est 'b',... et la relation d'ordre sur les caractères a < b < c.
    Dans un ensemble de bits ou a, b, c = 1, 2, 4, si j'ai 7, je n'ai plus vraiment d'ordre côté séquence seulement la relation d'appartenance (est dans) et bien sûr a < b < c.

    Donc çà dépend de la relation d'ordre qu'on cherche à exploiter (et comment).

    Après, si on cherche à rendre compte de l'ordre d'insertion, ce sera plutôt une liste (parce que c'est mutable) et si on la consomme par la tête, on préférera un deque (plus efficace).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 12
    Par défaut
    En gros :
    pas de relation d'ordre : Set
    relation d'ordre / énumération + mutabilité aléatoire : List
    relation d'ordre / énumération + mutabilité par l'avant ou l'arrière : deque
    relation d'ordre / énumération + non mutabilité : Str (si nécessité de construction par concaténation) ou Tuple (si construction par expression directe)

    Merci !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/03/2016, 14h21
  2. VBA_Supprimer les espaces superflus dans une chaîne de caractères
    Par Ma_Mariem dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 24/05/2013, 17h15
  3. Réponses: 2
    Dernier message: 01/12/2008, 12h00
  4. Réponses: 8
    Dernier message: 03/11/2007, 18h01

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