Сегодня поговорим о такой интересной вещи как замыкания в Python.
По сути замыкание - это внутренняя функция, которая возвращается из внешней и использует переменные из внешнего скоупа(которые ей не принадлежат). Функция как бы “замыкает“, захватывает переменные из внешней функции. Вы могли встречать такое например в декораторах.
Каждый объект замыкания независим, они не пересекаются, у каждого свои данные.
Замыкания это еще один шаг в сторону ООП, так как тут мы имеем некоторое состояние (данные) сокрытое от посторонних глаз и с которым можно взаимодействовать только с помощью заранее написанного интерфейса (функция).
Замыкания могут быть полезны для того чтобы избегать использования global, а также и в других случаях, когда нам важно, чтобы наши данные не изменили невалидным способом, чтобы с данными работали только через нашу логику.
НО(!) до этих данных тоже можно добраться при определенном желании, нужно понимать что нет полного сокрытия данных.
Если есть непреодолимое желание и возможность поддержа