Курс 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 itertools combinations() — группировка элементов
  2. Условные выражения в Python
  3. Умножение строк и списков
  4. JMESPath в Python
  5. Ошибка NotImplemented в Python
  6. Создание и обучение модели с Keras
  7. Проверка ввода с помощью isdigit
  8. Избегайте пустого списка
  9. Разделение списка на гнппы
  10. Python reversed() функция
  11. Представление бесконечности в Python
  12. Удаление элементов из списка
  13. Операторы увеличения и уменьшения переменной
  14. Работа с очередями в Python
  15. Отправка HTTP-запросов в Python
  16. Вложенные циклы в Python
  17. SciPy: широкий функционал для математических операций
  18. Очистка вывода в Python
  19. Структурирование именованных констант
  20. Метод __index__ в Python
  21. Модуль os в Python: работа с файлами
  22. Списки в Python: основы
  23. Вывод переменной и строки в Python
  24. Поиск с помощью регулярных выражений
  25. Декораторы в Python
  26. Генераторы списков в Python
  27. Анонимные функции в Python
  28. Работа с модулем cmath
  29. Defaultdict в Python
  30. Закрытие файла в Python
  31. Хранение переменных в словаре.
  32. Добавление кнопки в tkinter
  33. Проблема с изменяемыми аргументами
  34. Создание таблиц в терминале с PrettyTable
  35. Измерение времени выполнения кода с использованием time
  36. Уникальные значения из списка
  37. Множественное наследование в Python
  38. Чтение бинарного файла в Python.
  39. Метод rxor для операции побитового исключающего «или»
  40. Работа с GitHub в Telegram
  41. Генераторные выражения и islice.
  42. Удаление дубликатов из списка
  43. Оператор is в Python
  44. Форматирование строк с % в Python
  45. Импорт классов из другого файла

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