Я решил написать эту статью, потому что в душе не понимал для чего она нужна, когда видел эту конструкцию в чужих программах. Если честно я частенько из интернета брал решения для своего кода и там была эта конструкция. Я просто молча чесал голову и пожимая плечами вставлял это в свой код, мол так и должно быть, а на вопросы коллег "для чего это нужно?", с умным видом отвечал "Так нада! Ты не шаришь". Сейчас же узнав что это, я попытаюсь вам донести свои мысли
Я думаю вы когда-то сталкивались с такой конструкцией как
if __name__ == "__main__".
Я как и вы пытался гуглить и узнать что это все-таки такое и для чего это нужно, но прочитав не мало статей так и не мог до разобраться до конца. В этой статье я постараюсь объяснить вам максимально понятно и приведу примеры.
Что такое __name__ и "__main__"?
Начнем с того, что эта конструкция служит для контролирования кода когда запускается файл с программой. Сама конструкция состоит из двух частей (как не странно): __name__ и "__main__". Разберем их отдельно.
__name__ - это своего рода "волшебная метка", которая меняется в зависимости от ситуации. Например, если ты запускаешь файл напрямую, то твоя программа получает метку __main__ -> "Я главный!". Если твой файл импортируют в другой скрипт или программу, то эта метка становится (переименовывается) именем файла.
"__main__" - это специальный "режим работы", который активируется если ты запускаешь файл напрямую (как главную программу). При запуске твоя программа сразу понимает, что "Я сейчас главный, можно выполнять код!"
Отлично, с этим кое как разобрались, поехали дальше.
Что такое if __name__ == "__main__"
Приведу пример:
Допустим этот небольшой код находится в файле kalkulator.py . Если запустить этот файл, то код внутри if выполнится и мы увидим результат. НО если же импортировать нашу функцию (from kalkulator import add) , то код внутри if не сработает. То есть сама функция add() будет доступна, но вывода результата (print) не будет((
Теперь разберемся для чего эта конструкция.
- Начнем с того, чтобы наш код не шалил при импорте. Без конструкции if __name__ == "__main__" все команды в файле на примере print будут работать даже при импорте
- Удобнее тестировать код. Можете писать тесты внутри конструкции, и они будут запускаться только когда вы работаете с этим файлом
- Делать какую-то многофункциональность. Файл может быть и самостоятельной программой, и набором функций для других скриптов
ИТОГ:
Можно ли обойтись if __name__ == "__main__"?
Конечно можно, но иногда не желательно. Важность этой конструкции, как важность хлеба к супу - кому-то по кайфу с хлебом, кому-то нет. Но кто-то например не может обойтись без хлеба, потому что не наедается и хочет больше углеводов в своем рационе. Как я уже написал выше, практически вся разница только при импорте, не более.
Я надеюсь, что вам понравилась эта статья и вы наконец-то смогли понять что же это за конструкция такая)))