Источник: Обучение питона по марке Лутцсостояние удержания для классов и закрытия
область содержания: страница # 503
классов против закрытия: Он утверждает, что "классы могут показаться лучше на государственном удержании, потому что они делают их память более явна с назначением атрибутов.
функции закрытия часто обеспечивают более легкую и жизнеспособную альтернативу, когда сохранение состояния является единственной целью. Они обеспечивают локальное хранение для каждого вызова для данных, требуемых одной вложенной функцией.
Что означает государственная рента и как сделать память более явной с назначением атрибутов?
Может ли кто-нибудь представить пример, который доказывает более легкий вес для закрытия в случае сохранения состояния и объясняет, что такое локализованное хранилище для данных в контексте одной вложенной функции?
Я попробовал пример закрытия в интерактивной оболочке, он работал нормально, но когда я пытаюсь выполнить counter(), я получаю Typeerror: объект «NoneType» не может быть вызван. Также почему вы отметили нелокальное значение count ... мы применяем правило LEGB для переменных области? – Praneeth
@Praneeth: Я исправил объект NoneType. Если бы мы не использовали 'nonlocal', пример был бы незаконным, так как он попытался бы увеличить локальную переменную, которая еще не существует. – Kevin
это работает сейчас. Чтобы заключить, что выражение через классы выглядит более прямолинейно, чем замыкание в терминах количества строк, это означает, что мы сохраняем больше данных в кеше для классов, чем функции закрытия!? – Praneeth