Часто можно встретить код в таком виде:
def do_something():
print("something")
if __name__ == "__main__":
do_something()
Code language: PHP (php)
Вместо, например:
def do_something():
print("something")
do_something()
Code language: PHP (php)
Кроме того, замечаем, что переменная name не инициализируется нами, а существует в окружении.
- В чем разница?
- Почему стоит отдавать предпочтение одному, а не другому?
- Что это такое и как это работает?
Ответы.
Ответ 1.
Это тесно связано с тем, как работает интерпретатор Python:
- Когда интерпретатор читает файл кода, он выполняет весь глобальный код в нем. Это предполагает создание объектов для каждой определенной функции или класса и глобальных переменных.
- Каждый модуль (файл кода) в Python имеет специальный атрибут __name__, определяющий пространство имен, в котором он работает. Используется для уникальной идентификации модуля в системе импорта.
- “__main__” – это имя области видимости, в которой выполняется код верхнего уровня (ваша основная программа).
- Интерпретатор передает значение атрибута __name__ в строку ‘__main__‘, если модуль запущен как основная программа (когда вы запускаете его, вызывая интерпретатор в терминале с помощью python my_module.py, дважды щелкая по нему, запуская его в интерактивном интерпретаторе и т.д.).
- Если модуль вызывается не как основная программа, а импортируется из другого модуля, атрибут __name__ становится именем самого файла.
То есть, если у вас есть файл с названием my_modul.py, то при запуске его в качестве основной программы атрибут __name__ будет ‘__main__‘, если вы используете его, импортируя из другого модуля (import my_module), то атрибут __name__ будет равен ‘my_module’.
В основном, используя if name == “main“:, вы проверяете, был ли модуль выполнен напрямую или нет (импортирован). Если он был выполнен как основная программа, то выполняется код внутри условного.
Одна из причин для этого заключается в том, что иногда вы пишете модуль (файл .py), который вы можете запустить напрямую. Однако в качестве альтернативы вы можете импортировать и повторно использовать его функции, классы, методы и т.д. в другом модуле.
Ответ 2.
Оператор if, типа:
if __name__ == “__main__”:
# (блокировка элементов внутри)
Code language: PHP (php)
Используется для изоляции или разделения выполнения ( блокировка элементов внутри ) в пределах одной программы (условие истинно), когда эта программа полностью импортируется в другую.
Таким образом, я могу делать разные вещи с одной и той же программой.
Ответ 3.
Это условие просто делает запрос, чтобы проверить, является ли выполняемый файл главным или корневым файлом программы.
В Python метод __ name__ – это имя вашего файла.
Например: calculator.py >> он примет __ name__ имя вашего .py файла и сравнит его с __main__, который всегда будет для Python главным файлом, файлом с наивысшей иерархией.
Вы, возможно, задаетесь вопросом: в чем смысл? Зачем мне тратить время на создание условия, если я просто хочу, чтобы программа выполнялась?
Ответ на этот вопрос заключается в следующем.
Давайте представим себе приложение с тысячами .py файлов, и вам поручают проект, который уже делал кто-то другой, как вы узнаете, какой файл является корневым?