Как вы используете конструкцию if name == "main": в своих проектах?
Для чего нужна эта конструкция? Приведите пример из своего кода, где вы ее применяли. Что будет, если ее не использовать?
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 выполнит весь файл, включая запускающий код внизу. У меня однажды тесты при импорте запустили рабочую выгрузку — с тех пор пишу проверку на автомате.
Если совсем коротко: это переключатель «файл запустили или импортировали». Запустили напрямую - код под if выполнится. Импортировали из другого файла - не выполнится, возьмутся только функции.
На практике держу под этой проверкой тестовый запуск: пока пишешь модуль, запускаешь его напрямую и смотришь результат. Потом импортируешь модуль в основной проект - и этот запуск не мешает.