Курс 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. Установка пакетов с помощью pip
  2. Оптимизация памяти с помощью __slots__
  3. Поиск индексов в списке
  4. Сортировка HTML-элементов
  5. Оператор assert в Python
  6. Основные функции и модули Python
  7. Работа с argparse
  8. Использование эмодзи в Python
  9. Библиотека itertools: объединение списков
  10. Оператор «моржа» (Walrus Operator)
  11. Тайное преобразование типа ключа
  12. Извлечение аудио из видео
  13. Colorama: окрашивание текста в Python
  14. Проверка типов с использованием isinstance
  15. Работа с Requests для HTTP-запросов
  16. Python reversed() vs срез[::-1]
  17. Непрерывная проверка в Python
  18. Библиотека funcy: удобные утилиты
  19. Solidity для DeFi Ethereum
  20. Форматирование строк в Python
  21. Метод ne для сравнения объектов
  22. Разработка Telegram-ботов
  23. GitHub в Telegram: подписка на уведомления
  24. Быстрый поиск кода
  25. Python 3.12: переиспользование кавычек
  26. Метод округления чисел
  27. Оператор is в Python
  28. Метод pos в Python
  29. Управление доступом к модулю
  30. Настройка нарезки списков
  31. Создание списков в Python
  32. Преобразование чисел в слова
  33. Выражения-генераторы в Python
  34. Выражения-генераторы в Python
  35. Метод remove() для удаления элемента из списка
  36. Преобразование кортежа в словарь.
  37. Работа с парами ключ-значение
  38. Функция __init__ в Python
  39. Создание вкладок с TKinter
  40. lru_cache оптимизация функций
  41. Инверсия списков и строк в Python
  42. Python Translator: создание локальных переводчиков
  43. Преобразование строк в числа с плавающей запятой
  44. Удаление дубликатов с сохранением порядка с помощью dict.fromkeys
  45. Работа с массивами в Python
  46. Декораторы в Python
  47. Создание новых списков в Python
  48. Использование type hints
  49. Библиотека wikipedia для Python

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