Вы, должно быть, сталкивались с конструкцией if __name__ == "main" в Python. Но знаете ли вы его точное назначение?

В некоторых языках программирования метод main служит единственной точкой входа для выполнения программы. При переходе с других языков на Python идиома если __name__ == "__main__" может показаться, что они выполняют ту же задачу. В Питоне это не так.

если __name__ == "__main__" идиома позволяет выполнять определенный код, когда файл запускается как скрипт. Это также гарантирует, что тот же самый код не будет выполняться, когда вы импортируете файл как модуль.

Понимание поведения переменной __name__

__имя__ переменная встроена в Python. Он представляет собой имя модуля или скрипта, в котором он используется. Когда скрипт выполняется как основная программа, его значение устанавливается равным __основной__. Если вы импортируете скрипт как модуль, значение переменной устанавливается равным фактическому имени модуля.

Сначала это может сбить с толку, но взгляните на следующий пример:

instagram viewer

Создайте сценарий и назовите его приветствия.py. Этот скрипт будет содержать функцию, которая приветствует пользователя и печатает значение __имя__ переменная. Он также попросит пользователя ввести свое имя.

дефприветствовать(имя):
Распечатать(ф"Здравствуйте, {имя}!")

Распечатать("Значение __name__:", __имя__)

если __имя__ == "__основной__":
имя_пользователя = ввод("Пожалуйста, введите Ваше имя: ")
приветствовать (имя_пользователя)
еще:
Распечатать("Модуль приветствия импортирован.")

Запуск приветствия.py script отобразит следующий вывод:

Значение __имя__ переменная возвращает как __основной__ потому что скрипт выполняется напрямую.

Теперь создайте еще один скрипт и назовите его script2.py. Затем импортируйте привет скрипт как модуль.

Импортировать привет

Распечатать("Выполнение сценария приветствия...")
привет.привет("Алиса")

Вызов приветствовать функцию от приветствие Модуль дает следующий вывод.

Значение __имя__ переменная изменяется на фактическое имя импортированного модуля. В этом случае, привет.

Это значение - то, что идиома если __name__ == "__main__" ищет, чтобы определить, выполняется ли файл как сценарий или импортируется как модуль.

Когда использовать конструкцию if __name__ == "__main__"?

Вы можете добавить если __name__ == "__main__" построить в любом скрипте. Но есть несколько сценариев, в которых его использование может быть наиболее полезным. Вы узнаете об этих сценариях, используя простую программу-калькулятор ниже.

# калькулятор.py

дефдобавлять(а, б):
возвращаться а + б

дефвычесть(а, б):
возвращаться а - б

дефумножить(а, б):
возвращаться а * б

дефразделять(а, б):
если б != 0:
возвращаться а/б
еще:
возвращаться"Ошибка: деление на ноль!"

если __имя__ == "__основной__":
Распечатать("Добро пожаловать в Калькулятор!")
Распечатать("Выберите операцию:")
Распечатать("1. Добавлять")
Распечатать("2. Вычесть")
Распечатать("3. Умножить")
Распечатать("4. Разделять")

выбор = целое (ввод("Введите ваш выбор (1-4):"))

num1 = число с плавающей запятой (ввод ("Введите первое число:"))
число2 = число с плавающей запятой (ввод("Введите второе число:"))

если выбор == 1:
результат = добавить (число1, число2)
Распечатать(f"Сумма {num1} и {num2} является: {результат}")
Элиф выбор == 2:
результат = вычесть (число1, число2)
Распечатать(f"Разница между {num1} и {num2} является: {результат}")
Элиф выбор == 3:
результат = умножить (число1, число2)
Распечатать(f"Продукт {num1} и {num2} является: {результат}")
Элиф выбор == 4:
результат = разделить (число1, число2)
Распечатать(f"Отделение {num1} к {num2} является: {результат}")
еще:
Распечатать("Неверный выбор!")

Первый сценарий — это когда вы хотите запустить скрипт самостоятельно и выполнить определенные действия. Это позволяет скрипту функционировать как отдельная программа. если __name__ == "__main__" конструкция позволяет пользователям взаимодействовать с калькулятором с помощью интерфейса командной строки. Это дает пользователям возможность использовать функциональные возможности программы без необходимости понимать или изменять базовый код.

Программу по-прежнему можно запускать без если __name__ == "__main__" построить и достичь того же результата, но ваш код потеряет модульную организацию кода.

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

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

Импортировать калькулятор

# Использование функций из модуля калькулятора
result_add = калькулятор.добавить(5, 3)
Распечатать("Результат добавления:", результат_добавить)

результат_вычитания = калькулятор.вычитание(10, 4)
Распечатать("Результат вычитания:", результат_вычитания)

Третий сценарий — когда вы хотите протестировать и отладить ваш скрипт Python независимо от любых других модулей или скриптов, которые могут его импортировать. В примере с калькулятором проще сосредоточиться на тестировании функциональности калькулятора без вмешательства внешнего кода.

Импортировать калькулятор

# Тестирование функций калькулятора
если __имя__ == "__основной__":
# Тестовое добавление
результат = калькулятор.добавить(5, 3)
Распечатать("Результат добавления:", результат)

# Проверка вычитания
результат = калькулятор. вычесть (8, 4)
Распечатать("Результат вычитания:", результат)

# Проверка умножения
результат = калькулятор. умножить (2, 6)
Распечатать("Результат умножения:", результат)

Приведенный выше код демонстрирует, как самостоятельно отлаживать скрипт калькулятора.

Когда нет необходимости использовать конструкцию if __name__ == "__main__"?

Как вы видели в приведенных выше сценариях, использование если __name__ == "__main__" конструкция состоит в том, чтобы различать скрипт, который вы запускаете как основную программу, и тот, который вы импортируете как модуль. Однако есть случаи, когда его использование нецелесообразно.

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

Другой случай - когда вы работаете в интерактивном сеансе Python, например. при использовании Jupyter Notebook. В интерактивном сеансе вы вводите и выполняете код непосредственно в командной строке или в интерактивной оболочке Python. Например, Python REPL (цикл чтения-оценки-печати). Это позволяет вам экспериментировать с кодом и тестировать небольшие фрагменты, получая немедленные результаты.

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

Как стать мастером Python?

Чтобы стать мастером любого языка программирования, вы должны понимать, как работают основные концепции функций или инструментов. Так же, как вы узнали о конструкции if __name__ == "__main__" в этой статье.

Понимание основных концепций поможет вам точно знать, как будет вести себя ваша программа при их использовании. Не торопитесь, изучение концепций по одной поможет вам глубже погрузиться в каждую из них.