2010-06-29 5 views
0

J'ai rencontré un problème avec les variables de portée quand IPython est invoqué à la fin d'un script python. Toutes les fonctions que j'appelle dans le script lui-même peuvent modifier des variables, qui seront ensuite utilisées par d'autres fonctions. Si j'appelle les mêmes fonctions dans ipython, les fonctions scriptées peuvent accéder aux variables modifiées mais les variables qui existaient quand ipython a été appelée ne changent pas. Donc ma question: Comment puis-je propager les variables globales dans ipython? (je pourrais faire quelque chose comme A = globals() [ 'A'] bien sûr mais c'est laid)IPython avec sa propre portée?

Répondre

0

Vous pouvez créer une classe avec une méthode statique (décorateur: @staticmethod) qui renvoie une instance singleton de cette classe. Cet objet peut contenir n'importe quel nombre de membres qui fonctionnent comme globals.

class Globals: 
    __master = None 
    somevar = 1 
    othervar = 2 

    @staticmethod 
    def get_master(): 
     if Globals.__master is None: 
      Globals.__master = Globals() 

     return Globals.__master 

g1 = Globals.get_master() 
g2 = Globals.get_master() 
g1.somevar += 1 

print g1.somevar 
print g2.somevar 

Prints:

2 
2 
+0

où est staticmethod définir? Est-ce un builtin? – BandGap

+0

Il est intégré à python 2.4 et versions ultérieures. –

Questions connexes