Пространство имен — это область кода, в которой находится набор идентификаторов. Оно используется для хранения значений переменных и других объектов, которые связаны с определенными именами (идентификаторами).
Область видимости — это часть программы, из которой можно получить доступ к пространству имен напрямую без какого-либо префикса.
Типы пространств имен в Python
В Python есть три типа пространств имен:
Встроенное пространство имен создается при запуске интерпретатора Python и существует, пока интерпретатор работает. По этой причине встроенные функции, такие как id()
, print()
и др., всегда доступны из любой части программы.
Глобальное пространство имен создается в каждом модуле. Модули могут иметь разные функции и классы.
Локальное пространство имен создается при вызове функции, в которой определены имена.
Разные пространства имен изолированы. Следовательно, одно и то же имя, которое может существовать в разных модулях, не вызывает конфликта имен. Аналогично и в случае с классом. Следующая диаграмма иллюстрирует данную концепцию.
Область видимости в Python
Несмотря на то, что определены различные уникальные пространства имен, мы не можем получить доступ ко всем из них из каждой части программы. В игру вступает такое понятие, как область видимости.
Область видимости — это часть программы, из которой можно получить доступ к пространству имен напрямую без какого-либо префикса.
В любой момент существует как минимум три вложенные области видимости:
Область видимости функции с локальными именами.
Область видимости модуля с глобальными именами.
Встроенная область видимости со встроенными именами.
Когда внутри функции создается ссылка, имя ищется в локальном пространстве имен, затем в глобальном пространстве имен и, наконец, во встроенном пространстве имен.
Если функция находится внутри другой функции, новая область видимости помещается в локальную область видимости (функции).
Рассмотрим пример использования пространств имен в Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# Переменная global_var находится в глобальном пространстве имен global_var = 15 def outer_function(): # Переменная outer_var находится в локальном пространстве имен outer_var = 25 def inner_function(): # Переменная inner_var находится во вложенном локальном пространстве имен inner_var = 35 print(inner_var) print(outer_var) inner_function() # Выводим значение глобальной переменной print(global_var) # Вызываем внешнюю функцию и выводим локальные и вложенные локальные переменные outer_function() |
Результат:
15
25
35
Здесь есть три отдельных пространства имен: глобальное пространство имен, локальное пространство имен внутри внешней функции и локальное пространство имен внутри внутренней функции.
global_var
— находится в глобальном пространстве имен, имеет значение 15
.
outer_var
— находится в локальном пространстве имен функции outer_function(), имеет значение 25
.
inner_var
— находится во вложенном локальном пространстве имен функции inner_function(), имеет значение 35
.
При выполнении кода сначала выводится глобальная переменная global_var
, а затем локальные переменные: outer_var
и inner_var
при вызове внешней и внутренней функций, соответственно.
Рассмотрим пример использования глобального ключевого слова в Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# Определяем глобальную переменную global_var = 15 def my_function(): # Определяем локальную переменную local_var = 25 # Изменяем значение глобальной переменной global global_var global_var = 35 # Выводим значение глобальной переменной print(global_var) # Вызываем функцию и изменяем глобальную переменную my_function() # Выводим измененное значение глобальной переменной print(global_var) |
Результат:
15
35
Здесь при вызове функции my_function() ключевое слово global
используется для указания того, что global_var
является глобальной переменной, и ее значение изменяется на 35
.
Сначала мы выводим global_var
со значением 15
, затем вызываем функцию, и глобальная переменная изменяется на 35
внутри этой функции. И, наконец, выводим измененное значение переменной global_var
.