Раздел 45 · Python backend: Тарбадель

Функции первого класса, __call__ и замыкания

middle~35 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Элодий так и не дал тебе ответить на вчерашний вопрос. Утром на твоём верстаке лежит листок, а на листке одна функция и ни слова объяснений:

def make_discount(percent):
    def apply(kopecks):
        return kopecks - kopecks * percent // 100

    return apply

С функциями ты работаешь с урока 17, а в уроке 40 уже клал их в реестр команд, как обычные значения. Но тогда функция была инструментом, а сегодня Элодий просит посмотреть на неё как на вещь: что у неё внутри, что она помнит, и чем она отличается от объекта, который тоже можно позвать.

Это последний шаг перед большим куском раздела. Декораторы, functools, генераторы и контекстные менеджеры стоят на одном факте: функция в Python это объект, который можно создать во время работы, передать и вернуть, и который помнит, где он родился.

урок из курса

Урок из курса «Python backend: Тарбадель». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.