Курс 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. Форматирование вывода с F-строками
  2. Управление виртуальными окружениями в Python
  3. Округление банкира в Python
  4. Шаблоны Flask: условия и циклы
  5. Измерение времени выполнения с помощью time
  6. Удаление элементов из списка
  7. Непрерывная проверка в Python
  8. Настройка нарезки списков
  9. Путь к интерпретатору Python
  10. Функция enumerate() в Python
  11. Обратное распространение ошибки
  12. Срез списка в Python
  13. Операции со строками в Python
  14. Работа с набором данных CIFAR10 в PyTorch
  15. Объединение списков в Python
  16. Изменения в обработке логических значений
  17. Оценка точности модели
  18. Генераторы в Python
  19. Хранение переменных в Python.
  20. Удаление элемента по индексу в Python
  21. Непрерывная проверка в Python
  22. Упрощенный вывод данных в Python
  23. Отладка утечек памяти в Python
  24. Изменяемые и неизменяемые объекты
  25. Тестирование с unittest
  26. Определение основы слова с showballstemmer
  27. Методы list в Python
  28. Иерархия классов в Python
  29. Работа с срезами в Numpy
  30. Срез в Python
  31. JMESPath в Python
  32. Метод join() для объединения элементов
  33. Очистка входных данных
  34. Объединение словарей в Python
  35. Обучение модели с указанием эпох
  36. Удаление дубликатов из списка с помощью dict.fromkeys
  37. Работа с библиотекой xkcd
  38. Подсказки типов в Python
  39. Транспонирование матрицы в Python
  40. Работа с f-строками 2.0
  41. Счетчик ссылок в Python
  42. Работа с коллекциями Python
  43. Замеры производительности в Python
  44. Избегайте ошибку FileNotFoundError
  45. Удаление файлов и папок в Python
  46. Проверка однородности элементов списка
  47. Многопоточность в Python

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