Python для новичковФункцииДекомпозиция программы на функции

Декомпозиция программы на функции

Уроки курсаДекомпозиция программы на функции

Точка входа программы и функция main()

После декомпозиции возникает новый вопрос: где теперь «начинается» программа? В монолитном коде это очевидно — первая строка сверху. Но когда файл состоит из нескольких определений функций, сразу не понятно, что запускается первым и в каком порядке.

Точка входа — это место, с которого Python начинает исполнение. Технически это первая инструкция верхнего уровня, которая не является определением функции. Но когда таких инструкций много и они разбросаны по файлу, читать код становится неудобно: нужно мысленно отделять «описания» функций от «действий».

Стандартное решение — собрать все вызовы в одну функцию main() и вызвать её явно:

# ... (функции из предыдущего раздела: get_price, apply_discount, print_receipt) ...

def main():
    price = get_price()
    discounted = apply_discount(price, rate=0.1)
    print_receipt(discounted)

main()

Теперь структура файла читается однозначно: сверху — определения функций, снизу — единственный вызов main(), который запускает всё. Открыв файл, вы сразу видите, с чего начинается исполнение, не листая весь код.

Ещё один шаг — использовать конструкцию if __name__ == '__main__': вместо голого вызова main():

if __name__ == '__main__':
    main()

Что это даёт? В Python у каждого файла есть встроенная переменная __name__. Когда файл запускается напрямую командой python script.py, значение __name__ равно строке '__main__'. Когда тот же файл импортируется в другой модуль, __name__ принимает имя файла — и блок внутри if не выполняется.

Для начального уровня это важно по одной причине: такой паттерн защищает код от случайного запуска при импорте. Если вы когда-нибудь захотите использовать get_price или apply_discount из другого файла, весь сценарий с вводом не запустится автоматически.

Итоговый вид всей программы с явной точкой входа:

def get_price():
    return float(input("Введите цену: "))

def apply_discount(price, rate):
    return price * (1 - rate)

def print_receipt(price):
    print(f"Итого со скидкой: {price:.2f} руб.")

def main():
    price = get_price()
    discounted = apply_discount(price, rate=0.1)
    print_receipt(discounted)

if __name__ == '__main__':
    main()

Эта структура — стандарт, который вы будете встречать в большинстве Python-проектов. main() играет роль дирижёра: она не делает ничего сама, только вызывает остальные функции в нужном порядке. Именно в ней читается весь сценарий программы одним взглядом — без погружения в детали каждой функции.