Курс 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. Фильтрация элементов с помощью islice
  2. GitHub в Telegram: подписка на уведомления
  3. Переворот списка в Python
  4. Динамические маршруты во Flask
  5. Проверка дубликатов в Python
  6. Функция reduce() из модуля functools
  7. Удаление URL-адресов в Python
  8. SciPy: широкий функционал для математических операций
  9. Настройка логгера Logzero
  10. Хеширование паролей с солью
  11. Освобождение памяти в Python
  12. Разделение списка на гнппы
  13. Генераторы в Python
  14. Срез списка в Python
  15. Глубокое копирование объектов
  16. Python: отличительная особенность — отступы
  17. Выключение компьютера с помощью Python
  18. Основы работы со строками в Python
  19. Разработка Telegram-ботов
  20. Переменная Шредингера
  21. Замер времени выполнения кода
  22. Оператор is в Python
  23. Названия переменных
  24. Сортировка с параметром key
  25. Функция all() в Python
  26. Деление в Python
  27. Обработка исключения UnboundLocalError
  28. Изменяемые и неизменяемые объекты
  29. Функция print() — вывод информации
  30. Возврат нескольких значений из функции
  31. Создание вкладок с TKinter
  32. Регулярные выражения в Python
  33. Установка и использование emoji
  34. Передача неизвестных аргументов в Python.
  35. Взаимодействие с внешними процессами в Python
  36. Управление ресурсами с контекстными менеджерами
  37. Аннотации типов в Python
  38. Работа с аргументами командной строки в Python
  39. Итерации в Python
  40. Форматирование строк в Python
  41. Область видимости переменных
  42. Работа с классами данных
  43. Создание новых списков через list comprehensions
  44. Преобразование многоуровневого словаря

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