if __name__ == «__main__» в Python

Статьи

Введение

В данной статье разберёмся для чего нужна инструкция 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__» в Python?

Заключение

В ходе статьи мы с Вами узнали для чего нужна конструкция if __name__ == «__main__», как она работает и где может быть полезна. Надеюсь Вам понравилась статья, желаю удачи и успехов! 🙂

Admin
Admin
IT Start