Исполняемые команды уровня модуля Python
В python исполняемые операторы (if
, while
, print
и т. д.) могут быть размещены в модуле - без включения в функцию.
В C++ я обертываю команды внутри функции. Только static
Инициализация переменной может быть "выполнена" IIRC.
В Паскале я использую initialization
раздел.
Вот пример Python, показывающий 2 стиля выполнения команд уровня модуля (развернутый и обернутый).
Мне любопытно узнать, существуют ли случаи, когда существующий модуль с развернутыми командами не может быть изменен для использования обернутого стиля (возможно, что-то связанное с глобальными / нелокальными объявлениями?).
x = 1 # similar to c++ static variable init
#unwrapped
print(1 if x == 1 else 2)
#wrapped
def initialization():
print(1 if x == 1 else 2)
initialization()
1 ответ
Как правило, в Python, если модуль не очень прост и предназначен для выполнения одной и той же задачи только при запуске из командной строки, модули имеют блок, который выглядит следующим образом:
if __name__ == '__main__':
# run the main function here
main()
Это связано с тем, что при импорте модулей они не начинают делать что-либо, когда обычно предполагается использовать их функции, переменные и классы.
Я не уверен, если это отвечает на ваш вопрос; Я не знаю ни одного способа обернуть операторы, которые находятся на верхнем уровне модуля, кроме разделения тех, которые связаны с действиями, которые модуль должен выполнять, на связанные функции, и перемещения кода инициализации в "основной" с помощью вышеуказанного блока, чтобы запустить его, когда модуль работает как python yourmodule.py
,