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 :

nom de fonction en variable


Sujet :

Python

Vue hybride

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Par défaut nom de fonction en variable
    Bonjour,

    Je suis en train de réaliser un programme en python qui permet de faire des regroupements de modalités de variables de façon automatique.
    Pour cela, en fonction des variables, j'ai des types de regroupements différents, allant de 1 à 5.
    Pour chacun de ces regroupements, j'ai écrit une fonction (exemple : f_regroup_type_1 pour le regroupement de type 1)

    J'ai ensuite écrit une fonction, qui va exécuter automatiquement les fonctions associées au type de regroupement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def f_variables_a_regrouper():
        for i in xrange(len(regroupement_var[0])) : #regroupement_var = liste de liste au format [[liste nom variable], [liste recence variable], [liste type regroupement]]
            var_a_regr = regroupement_var[0][i]  #récupération de la ième variable
            print("var a regr", var_a_regr)
            type_a_regr = regroupement_var[2][i]   #récupération du type de regroupement de la i-ème variable
            print("type a reg", type_a_regr)
            nom_fonction="f_regroup_type_" + str(type_a_regr)  #création du nom de la fonction associée 
            print(nom_fonction)
            nom_fonction(var_a_regr)   #appel de la fonction f_regroup_type_X pour la var VAR_A_REGR
    Les résultats pour var_a_regr et type_a_regr sont corrects, ainsi que pour nom_fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ('var a regr', 'nb_titre_0_3')
    ('type a reg', 1)
    f_regroup_type_1
    Mais j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeError: 'str' object is not callable
    J'ai l'impression que mon programme ne fonctionne pas car Python pense que nom_fonction est un nom de fonction (!) et pas une variable. Est-ce bien ça?
    Comment corriger ce pb?

    Merci d'avance pour vos réponses.

    Meuah

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 676
    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 676
    Par défaut
    Citation Envoyé par meuah Voir le message
    J'ai l'impression que mon programme ne fonctionne pas car Python pense que nom_fonction est un nom de fonction (!) et pas une variable. Est-ce bien ça?
    Comment corriger ce pb?
    Le nom d'une fonction est une chaine de caractère "associée" à un objet de type function.
    Par défaut, lorsqu'on écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> def foo():
    ...     pass
    ...
    >>> foo.__name__
    'foo'
    >>> globals()['foo']
    <function foo at 0x000000000059CB70>
    >>>
    cette association est réalisée via (le dictionnaire) globals().
    Mais il est généralement plus simples de créer son propre dictionnaire car çà permet d'associer aux fonctions un nom plus "calculable" et aussi de récupérer des fonctions dans des modules différents.

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

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Par défaut
    Merci Wiztricks!!

    J'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    fonctions={}
    fonctions["f_regroup_type_1"]=f_regroup_type_1
     
    def f_variables_a_regrouper():
        for i in xrange(len(regroupement_var[0])) :
            var_a_regr = regroupement_var[0][i]
            type_a_regr = regroupement_var[2][i]
            nom_fonction="f_regroup_type_" + str(type_a_regr)
            print(nom_fonction)
            fonctions[nom_fonction](var_a_regr)
     
     
    f_variables_a_regrouper()
    Ca a l'air d'avoir fonctionné

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    --> f_variables_a_regrouper()
             159         nom_fonction="f_regroup_type_" + str(type_a_regr)
             160         print(nom_fonction)
         --> 161         fonctions[nom_fonction](var_a_regr)
             162 
             163
     
    --> f_regroup_type_1(var)

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

Discussions similaires

  1. Passer nom de formulaire en variable dans fonction publique
    Par clickandgo dans le forum VBA Access
    Réponses: 22
    Dernier message: 23/04/2012, 19h01
  2. Réponses: 6
    Dernier message: 25/08/2009, 11h15
  3. Nom d'un formulaire variable dans une fonction
    Par vince07 dans le forum VBA Access
    Réponses: 3
    Dernier message: 01/05/2008, 13h30
  4. Appeler une fonction dont le nom dépend d'une variable
    Par Cthulhu 22 dans le forum Langage
    Réponses: 7
    Dernier message: 14/08/2007, 16h01
  5. Nom de variable = nom de fonction
    Par Julien DJU dans le forum MATLAB
    Réponses: 2
    Dernier message: 03/07/2007, 10h30

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