Python __name__ и __main__
Обычно мы часто видим такой код на Python:
if __name__ == "__main__":
main()
В Python,__name__и__main__— это две специальные переменные, связанные с выполнением модуля и скрипта.
__name__и__main____name__ обычно используется для управления способом выполнения кода, особенно когда модуль может запускаться и как отдельный скрипт, и импортироваться другими модулями.
1. Переменная __name__
__name__ — это встроенная переменная, используемая для представления имени текущего модуля.
__name__ Значение __name__ зависит от того, как используется модуль:
Когда модуль запускается как основная программа:__name__значение __name__ устанавливается в"__main__"。
Когда модуль импортируется:__name__значение __name__ устанавливается в имя файла модуля (за исключением.py.py расширения).
Предположим, есть файл module.py:
print(f"模块的 __name__ 值: {__name__}")Вывод будет:模块的 __name__ 值: __main__
2. Смысл __main__
__main__— специальная строка, используемая для указания того, что текущий модуль запущен как основная программа.
__main__Обычно используется вместе с переменной __name__, чтобы определить, импортирован модуль или запущен как отдельный скрипт.
3. Распространённые шаблоны использованияif __name__ == "__main__":__name__ == "__main__"
В Python обычной практикой является добавление следующего блока кода в конец модуля:
Примеры
# Код здесь выполнится только тогда, когда модуль запущен как основная программа
main()
Этот шаблон позволяет модулю не выполнять определённый код при импорте и выполнять этот код только при запуске в качестве отдельного скрипта.
Пример
Предположим, у нас есть модуль с именем example.py:
Модуль файла example.py:
print("Привет из модуля example!")
if __name__ == "__main__":
print("Скрипт запущен напрямую.")
greet()
else:
print("Скрипт импортируется как модуль.")
Запустите example.py напрямую
Если вы запустите example.py напрямую, вывод будет:
该脚本正在直接运行。 来自 example 模块的问候!
В этом случае,__name__значение __name__ равно "__main__", поэтомуif __name__ == "__main__"__name__ == "__main__": блок кода будет выполнен.
Импорт example.py
Если вы импортируете example.py в другом скрипте, например:
Пример
import example
example.greet()
Вывод будет:
该脚本作为模块被导入。 来自 example 模块的问候!
В этом случае,__name__значение __name__ равно"example" (имя модуля), поэтомуif __name__ == "__main__":__name__ == "__main__" блок кода не будет выполнен.
Итог
__name____name__ — это встроенная переменная, которая представляет имя текущего модуля.Когда модуль запускается как основная программа,
__name__значение __name__ равно "__main__"."__main__"。Когда модуль импортируется,
__name__значение __name__ — это имя файла модуля.Использование
if __name__ == "__main__":__name__ == "__main__" позволяет управлять модулем так, чтобы определённый код не выполнялся при импорте, а выполнялся только при запуске в качестве отдельного скрипта.