Курс 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. Работа со случайными элементами
  3. Переворот строки
  4. Управление IP-адресами через прокси
  5. Генераторы в Python
  6. Конкатенация списков в Python
  7. Поиск наиболее частого элемента
  8. Глубокое копирование объектов
  9. Передача аргументов в Python
  10. Декоратор total_ordering для класса Point
  11. Фильтрация списков с itertools
  12. Копирование и вставка текста в Python
  13. Создание словарей и множеств в Python
  14. Лямбда-функции для min/max
  15. Многострочные комментарии в Python
  16. Удаление знаков препинания в Python
  17. Список переменных с %who
  18. Проверка ввода с помощью isdigit
  19. Проблемы с dict в Python
  20. Установка пакета в Python
  21. inspect в Python: анализ кода
  22. Фильтрация последовательности
  23. Функция enumerate() в Python
  24. Генераторы в Python
  25. Преобразование числа в восьмеричную строку
  26. Создание класса в Python
  27. Удаление элементов из списка в Python
  28. Метод clear для коллекций
  29. Использование html-скриптов в Jupyter Notebook
  30. Импорт объектов из модулей
  31. Получение обратного списка чисел
  32. Аннотации типов в Python
  33. Сглаживание списка
  34. Транспонирование матрицы в Python
  35. Навыки Python: строки, типы данных
  36. Получение атрибутов и методов класса
  37. Распаковка элементов массива
  38. Аннотации типов в Python
  39. Удаление дубликатов с сохранением порядка с помощью dict.fromkeys
  40. Распаковка элементов последовательности
  41. Ускорение выполнения кода в Python
  42. Тип данных TypeVarTuple
  43. Операции со строками в Python
  44. Область видимости переменных
  45. Работа с пакетами
  46. Метод lt для сортировки объектов

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