Курс 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. Поиск наиболее частого элемента списке
  2. Протокол управления контекстом
  3. Модуль itertools: эффективная работа с итераторами
  4. Фильтрация последовательности
  5. Оператор «not» в Python
  6. Разделение строк методом split()
  7. Метод Enumerate() для списков
  8. Операторы увеличения и уменьшения в Python
  9. Python enumerate() для работы с индексами
  10. Работа с очередями в Python
  11. Генераторы в Python
  12. Декораторы в Python
  13. Многострочные комментарии в Python
  14. Разность множеств
  15. Шаблоны и наследование в Flask
  16. Очистка входных данных
  17. Создание GUI с Tkinter: Entry
  18. Flask: создание веб-приложений
  19. ChainMap избыточные ключи
  20. Работа с асинхронными задачами в Python
  21. Генератор надежных паролей
  22. Defaultdict в Python
  23. Переопределение метода delitem в Python
  24. Идентификатор объекта в Python
  25. Сортировка в Python
  26. Работа с YAML в Python
  27. Получение локальных переменных в Python
  28. Декораторы для регистрации функций
  29. Декоратор Property в Python
  30. Транспонирование 2D-массива с помощью zip
  31. Управление асинхронными задачами с помощью Semaphore
  32. Работа со строками в Python.
  33. Избегайте ошибку FileNotFoundError
  34. Блок try-except-else
  35. Функции all() и any() в Python
  36. Хешируемые ключи в Python
  37. Аргументы *args и **kwargs
  38. Генерация случайных чисел Python
  39. 9 уловок для чистого кода
  40. Модуль inspect: получение информации о объектах
  41. Установка и использование Telegram API в Python
  42. Создание комплексных чисел

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