if __name__ == "__main__":
. Этот блок кода будет выполнен только при прямом запуске скрипта, а не при импорте его как модуля.
Вопрос на собеседовании: Как сделать так, чтобы при импорте определенного модуля выполнялся только его код (а не весь проект)?
Ответ:
Основной способ контролировать выполнение кода при импорте модуля в Python - использовать условную конструкцию if __name__ == "__main__":
.
Объяснение:
__name__
- это встроенная переменная, которая хранит имя текущего модуля.python my_module.py
), то переменной __name__
присваивается значение "__main__"
.import my_module
), то переменной __name__
присваивается имя модуля (например, "my_module"
).Пример:
# my_module.py
def my_function():
print("Функция из my_module")
print("Этот код выполняется всегда, при импорте и при запуске напрямую.")
if __name__ == "__main__":
print("Этот код выполняется только при запуске my_module.py напрямую.")
my_function()
Как это работает:
python my_module.py
, то будет выполнен весь код файла, включая код внутри блока if __name__ == "__main__":
.my_module
в другом файле, например:
# main.py
import my_module
my_module.my_function() #вызов функции из модуля
то будет выполнен код, который находится вне блока if __name__ == "__main__":
(print("Этот код выполняется всегда...")
), а код внутри этого блока выполнен не будет. То есть выполнится только print("Этот код выполняется всегда, при импорте и при запуске напрямую.")
и код функции my_function
будет доступен.
Дополнительные советы:
if __name__ == "__main__":
для размещения кода, который предназначен для тестирования модуля или для запуска его как самостоятельной программы.Важно: Данный метод не защищает от выполнения кода, который находится вне конструкции if __name__ == "__main__":
. Поэтому необходимо внимательно проектировать структуру модуля, чтобы минимизировать побочные эффекты при импорте.