Когда модуль Python называется, назначается __name__
из __main__
В противном случае, если он импортируется, он будет назначен __name__
модуля.
Конкретный пример
Давайте создадим модуль для игры с __name__
немного. Мы будем называть этот модуль Nodes.py
Анкет Это модуль, который мы можем запустить себя или импортировать и использовать в других модулях.
#!python # nodes.py if __name__ == "nodes": import sys import __main__ print(f"you have imported me {__name__} from sys.modules['__main__'].__file__}") if __name__ == "__main__": print("you are running me as main")
Я установил этот модуль для выполнения одного из двух операторов IF, основанных на том, запускается ли сам модуль или импортируется модуль.
Обратите внимание, что не часто иметь Если __name__:
Блок, это только для целей демострирования.
Запуск узлов Python.py
Запуск сценария Python с командой Python
Выполнит ваш скрипт сверху вниз.
python nodes.py
Это распечатает ты управляешь мне как главным
https://waylonwalker.com/install-miniconda/
Если у вас еще нет установки Python Попробуйте использовать Miniconda или Repit.com
Запуск ./nodes.py
Вы также можете просто выполнить скрипт из Bash, если сначала установите модуль для выполнения.
chmod +x nodes.py ./nodes.py
Примечание, как только вы установите файл для исполняемого, он останется исполняемым chmod +x nodes.py
необходим только один раз, даже если вы редактируете файл.
pipeline.py
Давайте создадим второй модуль Pipeline.py
и импортировать первый модуль узлы
и посмотрите, что произойдет.
#!python # pipeline.py import nodes
Так же, как узлы, мы можем запустить трубопровод в любом случае, если он исполняется
python pipeline.py # must run chmod +x pipeline.py first. ./pipeline.py
В любом случае он распечатает Вы импортировали мне узлы с ./pipeline.py
Реплика
Если бы мы были импортные узлы
Из Reply мы увидим ошибку в этом случае из -за того, что нет __main__
Файл, так как это сеанс реплики.
Сценарии использования
Основной вариант использования для Если __name__:
это гибкость. Просто импорт модуля не должен выполнять какой -либо код, печатать что -либо на экран, изменить файловую систему или, как правило, иметь какие -либо побочные эффекты в большинстве случаев. Это то, чего не ожидают большинство пользователей Python. Мы можем использовать этот блок, чтобы сделать его таким, чтобы модуль мог быть импортирован и выполнен.
богатый
богатый Библиотека использует его, чтобы сделать примеры каждого модуля печати на экран, если он выполнен. Я лично думаю, что это фантастическая идея.
ETL
В моем мире анализа данных мы часто создаем сценарий функций, который будет вести себя как своего рода конвейер ETL. Поскольку мы можем захотеть повторно использовать некоторые из этих функций в других сценариях, это общее, чтобы скрыть фактическое выполнение этих функций в Если __name__:
блокировать Так что мы не начинаем вносить изменения в данные, просто импортируя модуль.
Кли
Большинство приложений CLI будут использовать Если __name__:
запустить что -то, когда называется сценарием, а не импортируется. Это позволяет нам делать такие вещи, как тестирование намного проще.
Проверьте пример на первой странице Нажмите DOCS FRAMEWORK
Резкий
Если __name__:
Не так загадочно или страшно, он просто рассчитывает, был ли этот модуль назван в качестве сценария или импортирован откуда -то еще, и выполнять какое -то другое поведение в зависимости от того, как он был вызван.
if __name__ == "__main__": print("you are running me as main")
Ссылки по теме
- Пример из Rich.live Нажмите Документы Framework попробуйте самостоятельно в вашем браузере с Repit.com Переполнение стека: Что делать, если имя == ” Главный “: делать?
Проверьте эти связанные сообщения
https://waylonwalker.com/install-micromamba/
https://waylonwalker.com/kedro172_replit/
https://waylonwalker.com/pytest-capsys/
Оригинал: “https://dev.to/waylonwalker/what-is-if-name-main-and-how-do-i-use-it-1a44”