У цьому підручнику ми дізнаємося, як використовувати атрибут __name__ програми Python для його динамічного запуску в різних контекстах.
Яка основна () функція в Python?
Деякі мови програмування мають спеціальну функцію, main()
яка називається точкою виконання програмного файлу. Однак інтерпретатор Python запускає кожен рядок послідовно зверху файлу і не має явної main()
функції.
Python пропонує інші домовленості для визначення точки виконання. Один з них - використання main()
функції та властивості __name__ файлу python.
Що таке __name__ у Python?
Змінна __name__ - це спеціальна вбудована змінна Python, яка відображає ім'я поточного модуля.
Він має різні значення в залежності від того, де ми виконуємо файл Python. Давайте розглянемо приклад.
Запуск файлу Python як сценарію
Припустимо, у нас є файл Python, який називається helloworld.py, із таким вмістом:
print(__name__)
Якщо ми запускаємо helloworld.py з командного рядка, то він виконується як сценарій Python. Ми можемо запустити програму Python, використовуючи таку команду:
$ python helloworld.py
Коли ми запускаємо програму як сценарій, значення змінної __name__ встановлюється на __main__. Тож результат наступної програми буде:
__основна__
Запуск файлу Python як модуля
Ми також можемо запустити файл Python як модуль. Для цього нам потрібно імпортувати цей файл до іншої програми Python. Давайте розглянемо приклад.
Припустимо, у нас є файл Python, який називається main.py, в тому ж каталозі, що і файл heloworld.py. Він має такий зміст:
import helloworld
Коли ми запустимо цей файл, ми отримаємо такий результат:
Привіт Світ
Тут ми бачимо, що імпорт модуля також запускає весь код у файлі модуля.
Але ми бачимо, що замість відображення __main__ програма відображає ім'я модуля, тобто helloworld.
Це тому, що в контексті запуску файлу Python як модуля ім'я самого модуля присвоюється змінній __name__.
Використання if умовно з __name__
Тепер, коли ми зрозуміли, як змінні __name__ присвоюються значення, ми можемо використовувати if
умовне речення для запуску одного і того ж файлу Python по-різному в різних контекстах.
Давайте розглянемо приклад.
Припустимо, ми змінимо вміст файлу helloworld.py на такий:
def main(): print("Hello World") if __name__=="__main__": main()
Тепер, коли ми запускаємо його як скрипт через командний рядок, результат буде:
Привіт Світ
Однак, коли ми запускаємо його як модуль, імпортуючи його у файл main.py , вихід не відображається, оскільки main()
функція не викликається.
Тут ми створили спеціальну main()
функцію у файлі helloworld.py . Він виконується лише тоді, коли програма запускається як самостійний сценарій, а не як імпортований модуль.
Це стандартний спосіб явного визначення main()
функції в Python. Це один з найпопулярніших випадків використання змінної __name__ файлу Python.