Курс 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. Мониторинг работы программы Py-spy
  2. Работа с zip-архивами в Python
  3. Python: цикл for и оператор присваивания
  4. Циклы for в Python
  5. Оператор is в Python
  6. Игра «Угадывание чисел»
  7. Python Translator: создание локальных переводчиков
  8. Работа с OpenCV
  9. Сортировка данных с лямбда-функциями
  10. Запрос пароля с помощью getpass
  11. Итераторы с потерямиZIP
  12. Объединение строк с помощью метода join
  13. Парсинг веб-страниц с Beautiful Soup
  14. Тип CodeType в Python.
  15. Кортеж в Python: создание и использование
  16. Проекты на Python
  17. Инверсия списка/строки в Python
  18. Игра «Камень, ножницы, бумага» — Python
  19. Переворот строки с использованием цикла
  20. Оператор in для проверки наличия элемента
  21. Операторы увеличения и уменьшения переменной
  22. Метод pop() списка
  23. Модуль subprocess: запуск внешних команд
  24. Параллельные вычисления в Python
  25. Передача неизвестных аргументов в Python.
  26. Работа с асинхронными задачами в Python
  27. Выражения-генераторы в Python
  28. Применение команды break
  29. Перевернуть список в Python
  30. Сравнение строк в Python
  31. Перебор элементов списка в Python
  32. Преобразование данных в Python
  33. Модуль itertools: эффективная работа с итераторами
  34. Библиотека Rich: форматирование текста
  35. Ускорение выполнения кода в Python
  36. Игра Виселица на Python
  37. Объединение множеств в Python
  38. Сортировка и разворот списка
  39. globals и locals
  40. Исключение NotImplementedError
  41. Преобразование регистра символов
  42. Управление контекстом выполнения кода

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