Курс 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. Получение списка кортежей из словаря
  2. Метод __int__ в Python
  3. Метод hash в Python
  4. Сравнение def и lambda в Python
  5. Декораторы в Python
  6. Атрибуты массивов в Numpy
  7. Основные методы NumPy
  8. Solidity для DeFi Ethereum
  9. Метод difference_update() — разность множеств
  10. Настройка нарезки списков
  11. Оптимизация гиперпараметров с Scikit Optimize
  12. Создание и использование модулей в Python
  13. Инициализация объекта
  14. Отладка регулярных выражений в Python
  15. Подсказки типов в Python
  16. Метод rpow в Python
  17. Работа с CSV в Python
  18. Объединение словарей в Python
  19. Работа с *args и **kwargs в Python
  20. Отладка утечек памяти в Python
  21. %pinfo: получение информации об объекте
  22. Преобразование Word в PDF с Spire.Doc
  23. Установка и обучение ChatterBot
  24. Namedtuple в Python
  25. TypedDict для kwargs в Python 3.12
  26. Метод join() для объединения элементов строки
  27. Проверка условий: all и any
  28. Генераторы в Python
  29. Пересечение списков с использованием множеств
  30. Определение имен функций
  31. Извлечение аудио из видео
  32. Использование функции enumerate()
  33. Именованные аргументы в Python
  34. Функция с **kwargs в Python
  35. Измерение времени выполнения кода
  36. Параллельные вычисления в Python
  37. Безопасные SQL-запросы в Python 3.11
  38. Работа с базами данных SQLite
  39. Просмотр внешнего файла в Python
  40. Функции в Python
  41. Создание вложенного генератора
  42. Оператор * в Python
  43. Обработка исключений
  44. Поиск элементов BeautifulSoup
  45. Цикл for в Python
  46. Поиск индекса элемента в списке
  47. Преобразование букв в нижний регистр

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