NAMESPACE - это отображение имен в объекты. Большинство пространств имен в настоящее время реализованы как Python
словари, но это, как правило, не заметно (кроме производительности), и это может
изменить в будущем. Примерами пространств имен являются: набор встроенных имен (содержащих функции
такие как abs () и встроенные имена исключений); глобальные имена в модуле; и местные имена
в вызове функции. В некотором смысле набор атрибутов объекта также образует пространство имен.
Важно знать о пространствах имен, что между именами нет абсолютно никакой связи
в разных пространствах имен; например, два разных модуля могут оба определять функцию максимизации
без путаницы - пользователи модулей должны префиксировать его с именем модуля.
Кстати, мы используем атрибут слова для любого имени, следующего за точкой - например, в выражении
z.real, real - это атрибут объекта z. Строго говоря, ссылки на имена в модулях
ссылки на атрибуты: в выражении modname.func_name, modname является объектом модуля, а func_name
является атрибутом этого. В этом случае происходит прямое отображение между
Атрибуты модуля и глобальные имена, определенные в модуле: они используют одно и то же пространство имен!
SCOPE - это текстовая область Python-программы, где пространство имен доступно напрямую.
«Непосредственно доступный» здесь означает, что безусловная ссылка на имя пытается найти имя
в пространстве имен.
Хотя области действия определены статически, они используются динамически. В любое время во время исполнения,
Есть как минимум три вложенные области, пространства имен которых доступны напрямую:
- самая внутренняя область, которая ищется первой, содержит локальные имена.
- объемы любых включающих функций, которые ищутся, начиная с ближайшего охватывающего
область действия, содержит нелокальные, но также и неглобальные имена.
- следующая за последней область содержит глобальные имена текущего модуля.
- самая внешняя область (последний поиск) - это пространство имен, содержащее встроенные имена.
БЫТЬ ОСТОРОЖЕН!!!
-------------
Изменение глобальных или нелокальных переменных внутри внутренней функции может быть ПЛОХОЙ
практикой и может привести к более сложной отладке и более хрупкому коду! Делайте это только если знаете
что ты делаешь.
Для более подробного изучения смотрите ниже по ссылке.
Источник:
https://github.com/trekhleb/learn-python/blob/master/src/functions/test_function_scopes.py