Курс Python → Замыкания в Python

Замыкание — это функция, которая сохраняет доступ к переменным из внешней области видимости, в которой она была определена. Одним из основных случаев, когда стоит использовать замыкания, является ситуация, когда необходимо сохранить состояние функции между вызовами. Например, если требуется создать функцию, которая будет увеличивать переданное число на определенное значение каждый раз, замыкание может быть хорошим решением.

Однако, следует помнить, что использование замыканий может привести к сложностям в поддержке кода и его понимании. Если количество атрибутов и методов становится слишком большим, то лучше реализовать класс. Классы обеспечивают более явную структуру и иерархию, что упрощает работу с кодом в долгосрочной перспективе.

Примером, когда замыкание может быть более предпочтительным, чем определение класса и создание объектов, может быть функция, которая генерирует уникальные идентификаторы. В данном случае замыкание может хранить внутри себя последний использованный идентификатор и возвращать новый увеличенный на единицу каждый раз.


def create_id_generator():
    last_id = 0
    
    def generate_id():
        nonlocal last_id
        last_id += 1
        return last_id
    
    return generate_id

id_generator = create_id_generator()
print(id_generator())  # 1
print(id_generator())  # 2
print(id_generator())  # 3

В данном примере замыкание create_id_generator создает функцию generate_id, которая сохраняет переменную last_id в своей области видимости. При каждом вызове функции generate_id значение last_id увеличивается на единицу, что позволяет генерировать уникальные идентификаторы.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Функция с *args.
  2. Оформление текста в консоли с TermColor
  3. Участие в LP стейкинге Waves
  4. Переименование файлов в Python
  5. Обработка ошибок в Python
  6. Операции с датами в Python
  7. Декораторы с аргументами
  8. Progress с библиотекой tqdm
  9. Возврат нескольких значений
  10. Переопределение унарных операторов
  11. Типы возвращаемых значений в Python
  12. Создание уникального проекта
  13. Декораторы в Python
  14. Автоматизация действий с Pyautogui
  15. Статическая типизация в Python
  16. Обработка исключений с блоком else
  17. Поиск с помощью регулярных выражений
  18. Очистка данных с Pandas
  19. Хэш-функции в Python
  20. Вложенные циклы в Python
  21. Форматирование строк в Python
  22. Оператор * в Python
  23. Python: цикл for и оператор присваивания
  24. Отладка утечек памяти в Python
  25. Создание вложенного генератора
  26. Оператор Walrus в Python
  27. Генераторы в Python
  28. Поиск уникальных и повторяющихся элементов
  29. Распаковка с оператором *
  30. Сортировка в Python
  31. Особенности ключей словаря в Python
  32. Сложные типы данных в Python
  33. Определение индекса элемента списка
  34. Тип CodeType в Python.
  35. Отношения подклассов в Python
  36. Подсчет количества элементов в списке
  37. Обработка ошибок в JSON данных
  38. Поиск всех индексов подстроки
  39. Работа с рекламными данными в Pandas
  40. Класс UserDict: дополнительная функциональность
  41. Замыкания в Python
  42. Деление в Python
  43. Объединение множеств в Python

Marketello читают маркетологи из крутых компаний