Некоторые модули могут содержать такие запутанные конструкции:
try:
cache
except NameError:
cache = {}
На первый взгляд, в этом нет смысла:
cache
однозначно вызовет NameError
в начале модуля, так как переменной ранее не присваивалось значение.Однако это не так, если модуль перезагружается. В этом случае словарь, содержащий все атрибуты модуля, повторно используется, что даёт модулю возможность повторно использовать атрибуты своего предыдущего экземпляра. Если модуль спроектирован с учётом возможности перезагрузки, он может опираться на эту особенность. Например, приведённый выше код сохранить кэш при перезагрузке модуля.
👉@BookPython
>>Click here to continue<<