Уведомления

Группа в Telegram: @pythonsu

#1 Июль 9, 2012 19:53:42

Win95
От:
Зарегистрирован: 2011-11-04
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

отключение импортируемых ранее модулей

Доброго времени суток!)
Возможно вопрос покажется глупым, но возможно ли отключать ранее импортированные (самописные, т.е. не стандартные) модули?
Дело в том, что мне необходимо было написать множество функций и для простоты я запихал их в отдельные модули, а затем импортировал их по ходу выполнения основного кода. К сожалению сейчас необходимо прикрутить цикл, (а модуль импортируется лишь один раз) по этому и возникла надобность временно отключать их. Возможно ли это?



Офлайн

#2 Июль 9, 2012 20:08:15

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

отключение импортируемых ранее модулей

Покажите код. Что значит “отключать модули”?

Может вы имеете в виду какой-нибудь из этих вариантов. А может вам просто достаточно будет поставить флаг isImported. Без кода можно привести с десяток таких “может”.



Офлайн

#3 Июль 9, 2012 20:17:02

Win95
От:
Зарегистрирован: 2011-11-04
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

отключение импортируемых ранее модулей

record - записывает файл с некоторыми параметрами, а grafic - соответственно стрит по полученному файлу график, однако думаю это не важно.

def write():
    time.sleep(int(rex[3]))
    import record
    time.sleep(int(rex[4]))
    import grafic
    print u"* файл преобразован"
def chc(event):
    i=1
    for i in range(5):
        write()
        i+=1
Смысл в том, что мне несколько раз нужно пробегать write(), а импорт я могу выполнить лишь один раз.



Офлайн

#4 Июль 9, 2012 20:57:21

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

отключение импортируемых ранее модулей

Win95, либо выносите модули из функции, либо определяйте флаг isImported.

Если очень грубо:

isImported = False
 
def foo():
    global isImported
    if not isImported:
        import module
        isImported = True
 
while len(day) > len(night):
   foo()
 
isImported = False

Если всё это завернуть в класс, то будет поприятнее. В любом случае, это не правильно. Нужно выносить импорты из функций. В некоторых случаях можно перенести импорты в цикл, но это тоже будет ужасно. В общем, при изначальном некорректном планировании структуры проекта получается бяка :)

Ещё можно написать свой контекстный менеджер.



Отредактировано fata1ex (Июль 9, 2012 21:01:56)

Офлайн

#5 Июль 9, 2012 21:04:52

Win95
От:
Зарегистрирован: 2011-11-04
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

отключение импортируемых ранее модулей

fata1ex, спасибо за советы) но нашел такую замечательную (для меня) вещь как reload() она выгружает модуль, однако в Python 3x её кажется прикрыли) благо на 2.7 пишу)



Офлайн

#6 Июль 9, 2012 21:13:42

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

отключение импортируемых ранее модулей

Win95, долго искали-то? Я вам эту замечательную вещь прислал в первом же своём посте. Да и выполнять перезагрузку модуля при каждой итерации цикла, как минимум, некрасиво и неэффективно.



Офлайн

#7 Июль 10, 2012 06:45:23

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

отключение импортируемых ранее модулей

А почему бы не импортировать на уровне модуля?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version