if __name__ == '__main__'

Тренажер по Python для пользователей с начальным уровнем подготовки.

Тренажер по Python

В этом модуле мы разберем одну из самых важных и часто встречающихся конструкций в Python: __name__ и блок if __name__ == '__main__':. Вы узнаете, как Python определяет, запущен ли скрипт напрямую программистом или импортирован как модуль в другую программу.

Мы пройдем путь от понимания того, что хранится в переменной __name__, до написания профессионального кода, который можно безопасно использовать в больших проектах. Вы научитесь предотвращать нежелательное выполнение кода при импорте, правильно структурировать свои скрипты и создавать модульные тесты внутри файлов.

Впереди вас ждут задания на понимание синтаксиса, логики работы интерпретатора и сборку правильной структуры программы. Эти знания — стандарт индустрии, необходимый каждому Python-разработчику.

Список тем

Значение __name__ при прямом запуске

id: 40078_task_16_1

Мы создали простой скрипт script.py и запустили его напрямую. Какое значение будет выведено на экран?

Выберите правильный вариант ответа
# Файл: script.py
print(__name__)
Сообщения
Проверить
Показать подсказку

Значение __name__ при импорте

id: 40078_task_16_2

У нас есть файл utils.py. Мы создаем другой файл main.py и импортируем туда utils. Что выведет функция print, находящаяся внутри utils.py, при запуске main.py? Введите точный текст вывода (без кавычек).

Что должно получиться?
# Файл: utils.py
print(__name__)

# Файл: main.py
import utils
Сообщения
Проверить
Показать подсказку

Написание конструкции if __name__

id: 40078_task_16_3

Заполните пропуски, чтобы создать корректную проверку точки входа. Это стандартный шаблон для защиты кода от выполнения при импорте.

Заполните пропуски
def start_program():
    print("Program started")

if input1S == input2S:
    start_program()
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Сопоставьте условия запуска и значение переменной

id: 40078_task_16_4

Соедините сценарий запуска скрипта (слева) с тем, чему будет равна переменная __name__ внутри этого скрипта (справа).

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
Скрипт запущен напрямую (Run)
Скрипт импортирован как модуль (Import)
'__main__'
'имя_файла'
Сообщения
Проверить
Показать подсказку

Ошибка в проверке условия

id: 40078_task_16_5

В этом коде допущена частая ошибка новичков при сравнении. Найдите её и исправьте строку с условием if.

Найдите ошибку и исправьте
def main():
    print("Running main logic")
 
if __name__ = '__main__':
    main()
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Что выполняется при импорте?

id: 40078_task_16_6

Представьте, что у нас есть файл с кодом. Распределите части этого кода по двум категориям: то, что выполнится при любом обращении к файлу (включая импорт), и то, что выполнится только при прямом запуске.

Перетяните элементы в соответствующие блоки
Выполняется всегда (и при импорте)
Только при прямом запуске
def my_func(): ...
print("Start of file")
Вызов my_func() внутри блока if __name__ == '__main__':
import math
print("End of program") внутри блока if
Сообщения
Проверить
Показать подсказку

Соберите правильную структуру скрипта

id: 40078_task_16_7

Соберите код так, чтобы функция greeting была определена, но её вызов происходил только если скрипт запущен напрямую. Обратите внимание на отступы.

Перетяните в правильном порядке строки из одного блока в другой
greeting("Alice")
if __name__ == "__main__":
def greeting(name):
    print(f"Hello, {name}")
greeting("Bob")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Защита кода от выполнения при импорте

id: 40078_task_16_8

Вставьте необходимые элементы из банка, чтобы превратить этот скрипт в безопасный модуль. Функция process_data должна быть доступна для импорта, но тестовый запуск должен срабатывать только при прямом вызове файла.

Нужно правильно расставить в пропуски предложенные варианты
def process_data(data):
    return data * 2

def main():
    print(process_data(10))

if input1S == input2S:
    input3S
'__main__'
__name__
main()
'process_data'
process_data
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Предсказание вывода сложной программы

id: 40078_task_16_9

У нас есть два файла. Мы запускаем файл app.py. Внимательно проследите, что будет напечатано в консоли, учитывая, что один принт находится вне защитного блока.

Выберите правильный вариант ответа
# Файл: lib.py
print("Lib loaded")
if __name__ == "__main__":
    print("Lib main logic")

# Файл: app.py
import lib
print("App finished")
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру