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 :

Automatiser des traitements natifs sur des types différents [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut Automatiser des traitements natifs sur des types différents
    Bonjour

    Je suis en train d'essayer vainement d'automatiser des traitements sur des types différents (int, srt, list, ensembles).
    Et justement le souci, c'est que ces types divers ne traitent pas les données de la même façon

    Prenons un exemple: un int et une str
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    datas=(
    	{"name" : "a", "value" : 0, "fct" : int.__add__},
    	{"name" : "b", "value" : "", "fct" : lambda *args: str(args[1])},
    )
    for d in datas:
    	for v in (123, 456):
    		d["value"]=d["fct"](d["value"], v)
     
    print(datas)

    Donc ici, je suis obligé d'affecter le retour de la fonction à la valeur que je veux stocker. Là c'est ok (même si pour la string seule la dernière valeur reste, c'est juste un code d'exemple illustrant mon souci)

    Maintenant une liste et un ensemble
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    datas=(
    	{"name" : "a", "value" : set(), "fct" : set.add},
    	{"name" : "b", "value" : list(), "fct" : list.append},
    )
    for d in datas:
    	for v in (123, 456):
    		d["fct"](d["value"], v)
     
    print(datas)

    Ici, les méthodes "add" et "append" des valeurs de stockage se suffisent à elles-mêmes et je n'ai pas à affecter leur retour. D'autant plus qu'elles ne retournent rien.

    Et mon souci est d'arriver à trouver une méthode plus générique fonctionnant donc de façon identique pour tous ces types et je n'y arrive pas.

    Si quelqu'un avait une idée à me proposer...

    Merci à tous.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

    Citation Envoyé par Sve@r Voir le message
    Et mon souci est d'arriver à trouver une méthode plus générique fonctionnant donc de façon identique pour tous ces types et je n'y arrive pas.
    C'est la différence entre un type "mutable" et "non-mutable":
    mutable: on modifie l'objet et la méthode retourne None,
    non-mutable: on ne modifie par l'objet mais la méthode en retourne un autre.
    Si on veut faire quelque chose de générique, on peut éventuellement faire que les méthodes des objets mutables retournent un nouvel objet plutôt que None.

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

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Si on veut faire quelque chose de générique, on peut éventuellement faire que les méthodes des objets mutables retournent un nouvel objet plutôt que None.
    Merci de ton implication. Mais cela impose alors de se créer ses propres objets en remplacement des objets standard non ?

    En tout cas ça m'a bien gonflé de ne pas trouver. Alors je suis allé faire un peu de sport. Et pendant le sport j'ai pu y réfléchir plus calmement (comme quoi, quand on a un souci de prog il faut savoir lever le pied) et j'ai trouvé une solution palliative...

    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
    15
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
     
    datas=(
    	{"name" : "a", "value" : 0, "fct" : int.__add__},
    	{"name" : "b", "value" : "", "fct" : lambda *args: str(args[1])},
    	{"name" : "c", "value" : set(), "fct" : set.add},
    	{"name" : "d", "value" : list(), "fct" : list.append},
    )
    for d in datas:
    	for v in (123, 456):
    		x=d["fct"](d["value"], v)
    		if x is not None: d["value"]=x
     
    print(datas)

    A priori ça devrait être suffisant.

    Pour la petite histoire, je suis en train de me programmer un traitement générique de getopt. C'est à dire qu'au lieu d'écrire
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if opt == "-v": optV="truc"    # Option unique ex -vtoto
    if opt == "-w": optW.append("truc")       # Possibilité d'en avoir plusieurs ex -wtoto -wtiti
    etc

    Je passe par une boucle qui traite toutes les options et qui me remplit mes cas associés. Et mon souci était que je reprenais un de mes anciens codes dans lequel j'avais donné la possibilité de demander "-v" (ce qui donnait une volubilité élémentaire) ou "-v -v" (ce qui donnait une volubilité accrue) et ainsi de suite. Et c'est là que la galère a commencé...

    Merci à tous
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. matrice avec des types différents
    Par mido1951 dans le forum Débuter
    Réponses: 4
    Dernier message: 21/04/2016, 12h34
  2. Réponses: 17
    Dernier message: 18/01/2013, 00h47
  3. xsd:all sur des éléments de type différents
    Par Steph0 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 12/08/2012, 18h04
  4. itération sur des objets de types différents ?
    Par jc63 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 07/09/2007, 08h19
  5. Traitement d'image, comment distinguer des types?
    Par inai dans le forum Traitement du signal
    Réponses: 15
    Dernier message: 07/06/2005, 01h09

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