Ryoga
Сен. 30, 2014 18:06:06
Есть некий модуль А (обертка, по сути), вызывающий модуль Б.
В зависимости от результатов работы модуля Б (флаг удачной попытки), модуль А решает, пустить его еще раз через reload(), или хватит.
Вопрос: как передать этот флаг из Б в А?
bismigalis
Сен. 30, 2014 18:28:52
Ryoga
от результатов работы модуля
модули не работают, работают функции и методы
Ryoga
Сен. 30, 2014 19:26:22
Прекрасное лингвистическое замечание, которое, тем не менее, никак не помогает в решении проблемы.
Пока в голову пришло лишь достаточно топорное решение - костыль с передачей данных через третий модуль. Т.е. дополнить и обертку, и импортируемый модуль импортом некоего объекта из модуля С (списка из одного элемента, класса с одним атрибутом и т.д.), после чего модуль Б получит возможность, изменив его значение, передать после завершения информацию в А.
FishHook
Сен. 30, 2014 19:32:53
Ryoga
Прекрасное лингвистическое замечание,
Тем не менее имеющее прямое отношение к вопросу. Вы можете привести пример “вызова модуля из модуля” причем модуль “получает результаты работы модуля” из стандартной библиотеки питона? Какая из известных вам библиотек так делает?
bismigalis
Сен. 30, 2014 19:34:08
модули для разбиения кода на части.
используй функции
doza_and
Сен. 30, 2014 20:25:18
FishHook
Прекрасное лингвистическое замечание,
Поупражняемся в лингвистике.
Модуль - код который будет исполнен один раз за время существования процесса python. (Если не извращаться)
Функция - код который можно выполнить много раз за время существования процесса python.
Вам надо выполнить код много раз.
Вопрос к т.с. Почему нельзя использовать функцию?
ZZZ
Сен. 30, 2014 21:05:59
Я сейчас скажу, что функция тоже может быть модулем… С 2.6, кажется.
bismigalis
Сен. 30, 2014 21:18:29
ZZZ
функция тоже может быть модулем
WUT?
ZZZ
Сен. 30, 2014 22:46:26
В sys.modules можно положить всё, что душе захочется. И делать что-то типа так:
import my_super_module
print(my_super_module())
py.user.next
Сен. 30, 2014 23:03:14
>>> import sys
>>> sys.modules['x'] = lambda: print('x')
>>>
>>> x()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>>
>>> import x
>>> x()
x
>>> type(x)
<class 'function'>
>>> type(sys)
<class 'module'>
>>>