Простір імен — це область коду, в якій знаходиться набір ідентифікаторів. Він використовується для зберігання значень змінних та інших об’єктів, пов’язаних із певними іменами (ідентифікаторами).
Область видимості — це частина програми, з якої можна отримати доступ до простору імен напряму без будь-якого префіксу.
Типи просторів імен в 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 на екран.


(24 оцінок, середня: 4,58 з 5)