Partage
  • Partager sur Facebook
  • Partager sur Twitter

explication de la fonction eval...?

la passer de Matlab à Python

Sujet résolu
    28 juillet 2010 à 16:45:59

    Bonjour à tous,

    Je suis en train de passer un code Matlab en Python et je bloque sur la fonction eval (qui existe aussi bien dans les deux langages mais est-ce vraiment la même fonction?) :o

    En gros je récupère le nom d'une fonction que je voudrais utiliser sur d'autres données mais avec le nom sous laquelle je la récupère.

    En Matlab ça donne ça:
    [nom_fichier, entrees, nom_sortie, fonction] = charge_param(filename)
    %% qui me retourne le nom du fichier source, les entrées stockées dans un tableau, le nom des sortie et le nom de la fonction spécifique au cas traité
    
    load (fichier);
    nbEch = size(TIME,1);
    etat = 0;
    sortie = [];
    
    %% création des fichiers de sorties
    for i = 1:nbEch
       [tmp_sortie, etat] = eval([fonction,'(entrees(:,i), etat)']);
       sortie = [sortie;TIME(i), tmp_sortie];
    end



    En Python, le code est assez similaire mais je ne peux pas utiliser directement fonction

    nom_fichier, entrees, nom_sortie, fonction = charge_param(param_file);
    
    source = mio.loadmat(fichier)
    nbEch = len(TIME) # nombre d'échantillons
    etat = 0
    sortie = []
    
    # creation des fichiers de sortie
    for i in range(nbEch):
            tmp_sortie, etat = eval(fonction('entree(i), etat'))
    


    Si quelqu'un pouvait m'expliquer comment "activer" ma fonction sous son nom de sortie ce serait génial. ^^
    Merci d'avance!
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      28 juillet 2010 à 17:04:56

      Bonjour,

      eval() attend une chaine ou un objet 'code' en argument... Voir help(eval).

      @+
      • Partager sur Facebook
      • Partager sur Twitter
        28 juillet 2010 à 17:10:15

        heu... o_O J'ai déjà regardé mais ça ne me dit pas vraiment pourquoi et comment ça marche... aussi bien en théorie que dans mon programme
        • Partager sur Facebook
        • Partager sur Twitter
          28 juillet 2010 à 17:16:49

          Peut-être qu'avec un exemple ce serait plus parlant ?

          >>> def ma_fonction(i, n):
          ...     return '{0} * {1}'.format(i, n)
          ... 
          >>> n = 2
          >>> for i in range(10):
          ...     print ma_fonction(i, n), '=', eval(ma_fonction(i, n))
          ... 
          0 * 2 = 0
          1 * 2 = 2
          2 * 2 = 4
          3 * 2 = 6
          4 * 2 = 8
          5 * 2 = 10
          6 * 2 = 12
          7 * 2 = 14
          8 * 2 = 16
          9 * 2 = 18
          
          • Partager sur Facebook
          • Partager sur Twitter
          Zeste de Savoir, le site qui en a dans le citron !
          Anonyme
            28 juillet 2010 à 17:26:43

            Ou bien, :-°
            >>> def fonction(n):
            	return n*n
            
            >>> for i in range(5):
            	eval('fonction({0})'.format(i + 1))
            
            	
            1
            4
            9
            16
            25
            >>>
            
            • Partager sur Facebook
            • Partager sur Twitter
              28 juillet 2010 à 17:31:51

              Merci NoHaR pour ta réponse. Effectivement je comprends bien cet exemple mais ça ne s'applique pas à mon code:

              Je n'ai pas dû être très claire :-° en fait le terme fonction qui est retourné par charge_param est une chaine de caractère. En gros j'ai:
              def fct_spe(args):
              instructions = ...
              
              nom_fichier, entrees, nom_sortie, fonction = charge_param(param_file)
              ## fonction = 'fct_spe'
              
              # creation des fichiers de sortie
              for i in range(nbEch):
                      tmp_sortie, etat = eval(fonction(entrees, etat))
              


              et ça bien sûr ça ne marche pas. Je m'étais dis que comme en Matlab une partie des données était donnée en tant que str il y avait peut être une bidouille à faire. J'ai tentée pas mal de combinaison sans succès... :(
              • Partager sur Facebook
              • Partager sur Twitter
                28 juillet 2010 à 18:06:45

                fonction = eval(fonction)
                

                Et tu obtiens une vrai fonction Python dans ta variable fonction.
                eval évalue toute expression valide en Python dans le contexte du programme courant.
                • Partager sur Facebook
                • Partager sur Twitter
                  29 juillet 2010 à 10:11:02

                  OUI ÇA MARCHE!!!! Merci Merci Merci!! :D
                  Jamais je n'aurais pensé que c'eût été si simple

                  Merci à tous
                  • Partager sur Facebook
                  • Partager sur Twitter

                  explication de la fonction eval...?

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown