Зачем нужно if __name__ == "__main__"

Долго не писал код на питоне с тестами (зря, кстати) и как-то подзабыл зачем нужна конструкция

if __name__ == "__main__":

В рамках курса “Алгоритмы и структуры данных” каждый день пару хороших задач приходится делать, и без тестов не обойтись. Первую программу написал вроде нормально, оформил тесты для неё, но pytest в vs code ругается :( .

Ошибка оказалась элементарная: в решении всю логику вынес в функцию, чтобы было удобно тестить, а дальше в коде читал данные и вызывал эту функцию. Но в тесте, когда делаю импорт функции, выполняется весь код в теле программы, все эти input() :(

Собственно, если обернуть всю эту часть, чтение/вывод данных, в конструкцию if __name__ == “__main__”: проблема решается - эти строки будут выполняться, если запустить саму программу, но если импортировать модуль - они игнорятся.

Written on February 21, 2024