Рубрики
Без рубрики

Что, если __name__, и как я его использую.

Когда модуль Python называется, ему назначается __name__ __main__ иначе, если он импортируется … Tagged с Python.

Когда модуль 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") 

Ссылки по теме

Проверьте эти связанные сообщения

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”