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 :

fonction "exec" et ses �tranges param�tres "local" et "global"


Sujet :

Python

  1. #1
    Membre �clair�
    Avatar de Captain'Flam
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    F�vrier 2011
    Messages
    273
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : F�vrier 2011
    Messages : 273
    Billets dans le blog
    1
    Par d�faut fonction "exec" et ses �tranges param�tres "local" et "global"
    Bonjour,

    en faisant joujou avec la fonction exec je d�couvre un r�le �trange des param�tres global et local.

    Voici un bout de code qui vous �clairera sur ce qui me parait obscure :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    code1 = '''
    spam = lambda x : x*10
    eggs = lambda x : spam( x )/2
    '''
    code2 = '''
    print eggs( 5 )
    '''
     
    print 'exec( code1+code2 )'
    exec( code1+code2 )
     
    glo = {}
    loc = {}
    print '\nexec( code1+code2,glo,loc )'
    try                : exec( code1+code2,glo,loc )
    except Exception,e : print '####',e
     
    glo = {}
    loc = {}
    print '\nexec( code1,glo,loc ) ; exec( code2,glo,loc )'
    exec( code1,glo,loc )
    try                : exec( code2,glo,loc )
    except Exception,e : print '####',e
     
    glo = {}
    loc = {}
    print '\nlast try'
    exec( code1,glo,loc )
    glo.update(loc)
    exec( code2,glo,loc )
    il affiche �a :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    exec( code1+code2 )
    25
     
    exec( code1+code2,glo,loc )
    #### global name 'spam' is not defined
     
    exec( code1,glo,loc ) ; exec( code2,glo,loc )
    #### global name 'spam' is not defined
     
    last try
    25
    Pourquoi est-ce que quand je laisse les param�tres par d�faut de exec, �a marche, alors que quand je passe mes propres dictionnaires, non ?
    Et pourquoi faut-il transf�rer le contenu de loc dans glo ?

    J'ai relu le post tr�s int�ressant de tyrtamos, mais il ne r�pond pas (assez) � ma question.

    Ce que j'aimerais, c'est pouvoir manipuler un interpr�teur python avec son environnement (glo+loc) propre.
    --> j'�cris, en python, un compilateur pour un langage de mon cru, et je voudrais avoir un pr�processeur (un peu � la mani�re de celui du C) qui utilise la syntaxe python.
    Mais je ne veux pas que le code "pr�process�" de mon langage puisse acc�der aux variables/fonctions/classes de mon compilateur.

    Merci d'avance pour vos retours �clair�s !

  2. #2
    Membre �clair�
    Avatar de Captain'Flam
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    F�vrier 2011
    Messages
    273
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : F�vrier 2011
    Messages : 273
    Billets dans le blog
    1
    Par d�faut
    Je compl�te mon post en ajoutant que j'ai bien lu celui-ci sur stackoverflow.
    Je comprends que �a a l'air difficile pour des raisons profondes d'impl�mentation de l�interpr�teur python, mais le myst�re de l'update de dictionnaire reste entier...

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

    La r�ponse est plut�t dans ce post l�.

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

  4. #4
    Membre �clair�
    Avatar de Captain'Flam
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    F�vrier 2011
    Messages
    273
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : F�vrier 2011
    Messages : 273
    Billets dans le blog
    1
    Par d�faut
    punaise ! c'est encore plus compliqu� que ce que j'imaginais... (je ne connaissais m�me pas la lib dis)
    Mais heu... que puis-je en conclure ?
    Je dois avouer que la lecture de ce post me laisse avec encore plus de questions...
    Mais merci quand m�me !
    Je vais t�cher de creuser un peu plus...

  5. #5
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 771
    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 771
    Par d�faut
    Citation Envoy� par Captain'Flam Voir le message
    punaise ! c'est encore plus compliqu� que ce que j'imaginais... (je ne connaissais m�me pas la lib dis)
    Mais heu... que puis-je en conclure ?
    Que �� fonctionnerait mieux sans passer de locals i.e.:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    glo = {}
    print '\nexec( code1,glo,loc ) ; exec( code2,glo )'
    try                : exec( code1+code2,glo )
    except Exception,e : print '####',e
    Citation Envoy� par Captain'Flam Voir le message
    Je dois avouer que la lecture de ce post me laisse avec encore plus de questions...
    les explications sont dans la discussion.

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

Discussions similaires

  1. R�ponses: 2
    Dernier message: 20/01/2010, 17h33
  2. R�ponses: 1
    Dernier message: 18/09/2009, 11h25
  3. R�ponses: 7
    Dernier message: 16/01/2009, 21h41
  4. passage d'une liste � une fonction avec exec()
    Par kazh75 dans le forum G�n�ral Python
    R�ponses: 3
    Dernier message: 08/01/2009, 18h25
  5. [Syst�me] Commande wget via la fonction php exec()
    Par Sh4dow49 dans le forum Langage
    R�ponses: 4
    Dernier message: 10/11/2008, 15h02

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