Курс 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. Обработка исключения UnboundLocalError
  2. Управление контекстом выполнения кода
  3. Python-dateutil — работа с датами
  4. Преобразование Word в PDF с Spire.Doc
  5. Операции с массивами в NumPy
  6. Поиск подстроки в строке
  7. Поиск уникальных элементов строкой в Python
  8. Преобразование вложенного списка
  9. Выражения-генераторы в Python
  10. Форматирование строк в Python
  11. Принципы LSP и ISP в Python
  12. Обработка исключений
  13. Работа с датой и временем в Python
  14. Метод setdefault() в Python
  15. Переворот последовательности
  16. Оператор match в Python
  17. Оператор == в Python
  18. Перевернуть список в Python
  19. Создание списка дат
  20. Работа с Telegram API на Python
  21. Python defaultdict добавление ключа
  22. Комментарии в Python
  23. Удаление дубликатов из списка
  24. Преобразование данных в Python
  25. Метод count в Python: почему count(», ») возвращает 4?
  26. Удаление дубликатов из списка
  27. Сравнение неупорядоченных списков
  28. Создание словаря с значением по умолчанию
  29. Работа с timedelta в Python
  30. Кортеж в Python: создание, доступ, изменение
  31. Работа с файлами в Python
  32. Бесконечная проверка в Python
  33. Избегайте использования goto
  34. Красивый вывод списка
  35. Сортировка данных в Python
  36. Избегайте изменяемых аргументов
  37. Метод add для класса Vector
  38. Удаление дубликатов из списка с помощью dict.fromkeys
  39. Разделение строк методом split()
  40. Функции map, filter и reduce
  41. Оператор Walrus в Python
  42. Разделение строк в Python
  43. Цепные операции в Python
  44. Использование функции enumerate()
  45. Python groupby() из itertools: работа с повторяющимися элементами
  46. Искажение имен в Python

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