← Все вопросы

Как вы используете конструкцию if name == "main": в своих проектах?

Задан 2 месяца назад23 просмотров2 ответа
1

Для чего нужна эта конструкция? Приведите пример из своего кода, где вы ее применяли. Что будет, если ее не использовать?

2 ответа

2

Сначала поправка, чтобы никого не сбивало: конструкция пишется с двойными подчёркиваниями — if __name__ == "__main__":. В заголовке вопроса их, похоже, съел редактор — markdown принял подчёркивания за разметку.

Теперь по сути. У каждого файла есть переменная __name__. Когда файл запускают напрямую (python script.py), в ней лежит строка "__main__". Когда файл импортируют — в ней имя модуля. Проверка отделяет «код библиотеки» от «кода запуска»:

def parse(path):
    ...

def main():
    print(parse('data.csv'))

if __name__ == '__main__':
    main()

Пока скрипт один и его никто не импортирует, без проверки ничего страшного не случится. Проблемы начнутся, когда функции захочется переиспользовать: from script import parse выполнит весь файл, включая запускающий код внизу. У меня однажды тесты при импорте запустили рабочую выгрузку — с тех пор пишу проверку на автомате.

0

Если совсем коротко: это переключатель «файл запустили или импортировали». Запустили напрямую - код под if выполнится. Импортировали из другого файла - не выполнится, возьмутся только функции.

На практике держу под этой проверкой тестовый запуск: пока пишешь модуль, запускаешь его напрямую и смотришь результат. Потом импортируешь модуль в основной проект - и этот запуск не мешает.

Ваш ответ

, чтобы ответить на вопрос.