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 :
il affiche �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
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 )
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 ?
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
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 !
Partager