Введение
В данной статье разберёмся для чего нужна инструкция if __name__ == «__main__» в Python, и чем она может быть полезна.
Атрибуты в Python
Начнём с того, что в Python есть атрибуты, мы их можем вывести вызвав функцию dir():
print(dir())
# ['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
В полученном списке атрибутов мы можем увидеть атрибут __name__, а вот __main__ — нет.
Атрибут __name__
Разберёмся с тем, что же такое __name__. А __name__ — это атрибут, в котором хранится название программы. Если мы его вызовем в функции print(), то нам выведет __main__. Т.е. он ссылается на __main__:
print(dir())
# __main__
Сделаем f-строку, где будет говориться, что атрибут __name__ = {__name__}. После запуска кода выводит строку, что __name__ =__main__:
print(f'__name__ = {__name__}')
# __name__ = __main__
Как работает if __name__ == «__main__» в Python?
И так, python-файл с кодом print(f’__name__ = {__name__}’) называется script1. Создадим второй python-файл, и назовём его script2. Импортируем script1 в script2.
При импорте первого файла всё, что находится в нём будет запускаться, следовательно функция print() сработает и выведет данные.
import script1
При запуске файла script2, будет следующий вывод:
# __name__ = script1
Для чего нужна конструкция if __name__ == «__main__» в Python?
Теперь рассмотрим где это может быть полезно. Предположим, что в первом файле есть вот такая функция, которую мы в нём же и вызовем:
def func():
print('Функция сработала!')
func()
Во втором файле мы импортируем функцию из первого, и вызываем её:
from script1 import func
func()
Теперь при запуске второго файла строка «Функция сработала!» будет выведена в консоль 2 раза. Дело в том, что сначала её вызов сработает в первом файле, а потом и во втором. Вот чтобы этого избежать и следует использовать конструкцию if __name__ == «__main__»:
def func():
print('Функция сработала!')
if __name__ == "__main__":
func()
И теперь при запуске второго файла функция сработает всего один раз, т.к. там мы её вызвали:
from script1 import func
func()
# Функция сработала!
Видеоурок
Для большей наглядности можете посмотреть видеоурок:
Заключение
В ходе статьи мы с Вами узнали для чего нужна конструкция if __name__ == «__main__», как она работает и где может быть полезна. Надеюсь Вам понравилась статья, желаю удачи и успехов! 🙂
Мой Telegram канал
Мой YouTube канал
Курс по созданию телеграм-ботов на Python с фреймворком Aiogram