IPython с собственной областью? - PullRequest
0 голосов
/ 29 июня 2010

Я столкнулся с проблемой переменных области видимости, когда IPython вызывается в конце скрипта Python. Все функции, которые я вызываю в самом скрипте, могут изменять переменные, которые впоследствии будут использоваться другими функциями. Если я вызываю те же функции в ipython, скриптовые могут получить доступ к измененным переменным, но переменные, которые существовали при вызове ipython, не меняются. Таким образом, мой вопрос: как мне распространять глобальные переменные в ipython? (Я мог бы сделать что-то вроде A = globals () ['A'] конечно, но это ужасно)

1 Ответ

0 голосов
/ 30 июня 2010

Вы можете создать класс со статическим методом (decorator: @staticmethod), который возвращает одноэлементный экземпляр этого класса. Этот объект может содержать любое количество членов, которые функционируют как глобальные.

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

Печать:

2
2
...