Исполняемые команды уровня модуля 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,

Другие вопросы по тегам