Теперь вы умеете:
- создавать рекурсивные функции и применять их для задач, где решение строится через обращение к самому себе;
- отличать императивный и декларативный стиль программирования и понимать, какой из них лучше подходит в каждом конкретном случае;
- использовать кеширование для ускорения работы рекурсий: как вручную через словарь, так и автоматически с помощью
@lru_cache; - писать собственные декораторы и применять их для расширения функциональности других функций — универсально, через
*argsи**kwargs; - описывать функции-генераторы, использовать
yieldи работать с данными по частям, не загружая всю коллекцию в память.
Вы получили в руки мощные инструменты, которые позволяют писать компактный, выразительный и удобочитаемый код — особенно в тех случаях, когда функции должны быть максимально гибкими и повторно используемыми.
В следующей главе вас ждёт новый уровень организации кода — объектно-ориентированное программирование. Мы обсудим, как устроены классы и объекты в Python, зачем нужны инкапсуляция и наследование и как описывать сложные сущности и их поведение с помощью методов, полей и магических функций.