Курс 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. Работа с асинхронными задачами в Python
  2. Рациональные числа в Python
  3. Метод join() для объединения элементов в строку.
  4. Counter() — подсчет элементов
  5. Удаление ключа из словаря
  6. Работа с комплексными числами
  7. Асинхронный код в Python
  8. Обновление ключей в Python
  9. Работа с атрибутом dict
  10. Разбиение текста в Python
  11. Удаление и повторная вставка ключа в OrderedDict
  12. Анализ кода — Python
  13. Список импортированных модулей в Python
  14. Замена текста в Python
  15. Установка и использование библиотеки google
  16. Копирование и вставка текста в Python
  17. Функция с **kwargs в Python
  18. Оператор Walrus в Python
  19. Протокол управления контекстом
  20. Базовые объекты Python
  21. Декоратор для группы пользователей в Django
  22. Хранение данных с помощью dataclasses
  23. Комментарии в Python
  24. Переопределение метода __or__()
  25. Работа с очередями в Python
  26. Срезы в Numpy
  27. Округление чисел с помощью round
  28. Переопределение метода delitem в Python
  29. Работа с геоданными с помощью geopy
  30. Разность множеств
  31. Создание словаря и множества
  32. Вставка переменных в шаблоны Flask
  33. Python: возвращение нескольких значений
  34. Генерация резюме в Gensim
  35. Объединение словарей в Python
  36. Работа с файлами в Python
  37. Передача аргументов через **arguments
  38. Метод splitlines() для разделения строк
  39. Оператор «or» в Python
  40. Тестирование модели в PyTorch
  41. Создание и использование ChainMap
  42. Библиотека sh: удобные команды терминала
  43. Использование функции product
  44. Применение промокода в Много лосося
  45. Стать Python-разработчиком
  46. Оператор in для проверки наличия элемента
  47. Удаление ссылок в Python

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