"If name main"

"If name main"

@Pycoders

Если кратко, то такая конструкция - точка входа в программу.

__name__

Для наглядности покажу пример, создадим программу и напишем следующее.

num = 100

print(globals())

На выход получаем что-то типа такого:

{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7f92918870f0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'module.py', '__cached__': None, 'num': 100}

Дело в том, что интерпретатор перед началом программы определяет переменные для служебного использования. Там мы видим много всего, нашу переменную num и тот самый __name__. Разберемся с последним.

__name__ - переменная, которая обозначает наше пространство имен (пока что не особо важно, что это). Эту штуку можно даже вывести.

print(__name__)

Получим '__main__', потому что мы запускаем программу напрямую, а не с помощью импортирования.

Создадим файл module.py и напишем такое вот.

def func():
    print(__name__)

func()

Можем протестировать, вывод будет '__main__'. Теперь сделаем еще один файл test.py, импортируем наш module и запустим.

import module

Программа что-то вывела, а это что-то - слово 'module'. Однако мы помним, что дор этого тот же module.py выводил '__main__'. Так происходит потому, что тогда мы запускали программу прямо, а сейчас импортировали и запускали уже через другую программу.

Польза

Допустим, мы не хотим, чтобы при импорте код нашего module срабатывал, но нам надо, чтобы он работал, когад запускаем непосредственно сам module.py

Делаем вот так:

def func():
    print(__name__)

if __name__ == '__main__':
    func()

Теперь же при импорте ничего не будет происходить, но к функциям обращаться можно будет посредством module.func(), однако сейчас не об этом. Если запустим module.py, то код в нашем ветвлении сработает и выведится '__main__' - именно то, что нам и нужно.

Почти всегда программисты пишут эту конструкцию в своем коде, чтобы избежать непредвиденных ситуаций.

Дополнение

Но наиболее правильной и обыденной структурой кода будет примерно следующее.

import что-то_там
Import еще_чего-то

# классы и функции

def main():
    # сам код, используя классы и функции выше
    # обычно здесь пишут практически всю логику приложения

if __name__ == '__main__':
    main()



Report Page