Область видимости переменных в Python
Добавить в избранноеОбласть видимости (или scope) - это контекст, в котором переменная может быть доступна для использования. В Python существует два основных типа контекста: глобальный и локальный. Понимание этих контекстов является важным аспектом программирования, так как область видимости влияет на то, где и как можно использовать переменные в программе.
Глобальная область видимости
Глобальная область видимости охватывает переменные, объявленные вне любых функций, и такие переменные доступны во всей программе, включая все функции.
Пример:
name = "Кира" def say_hi(): print("Привет", name) def say_bye(): print("Пока", name) say_hi() say_bye()
Здесь переменная name объявлена вне функций, что делает её глобальной. Обе функции say_hi() и say_bye() могут свободно использовать эту переменную, так как она доступна во всей программе.
Локальная область видимости
Локальная область видимости применяется к переменным, которые определены внутри функции. Такие переменные доступны только внутри этой функции и недоступны за её пределами.
Пример:
def say_hi(): name = "Егор" surname = "Титов" print("Привет ", name, surname) def say_bye(): name = "Артём" print("Пока", name) say_hi() say_bye()
Здесь переменные name и surname являются локальными и существуют только в пределах своих функций. Несмотря на то, что обе функции содержат переменные с именем name, они не пересекаются, так как каждая из них имеет свою собственную область видимости.
Скрытие переменных
В Python возможно скрытие глобальных переменных локальными. Это происходит, когда внутри функции создаётся локальная переменная с тем же именем, что и глобальная. В этом случае глобальная переменная становится невидимой для этой функции.
Пример:
name = "Кира" def say_hi(): name = "Вика" # скрываем глобальную переменную print("Привет", name) def say_bye(): print("Пока", name) say_hi() # Привет Вика say_bye() # Пока Кира
Здесь в функции say_hi() локальная переменная name скрывает глобальную переменную с тем же именем, поэтому внутри этой функции используется именно локальная версия.
Использование global для изменения глобальной переменной
Иногда требуется не создать локальную переменную с тем же именем, а изменить значение глобальной переменной. Для этого в Python используется ключевое слово global.
Пример:
name = "Кира" def say_hi(): global name name = "Вика" # изменяем значение глобальной переменной print("Привет", name) def say_bye(): print("Пока", name) say_hi() # Привет Вика say_bye() # Пока Вика
Здесь благодаря ключевому слову global, функция say_hi() изменяет глобальную переменную name, и изменение сохраняется даже после завершения работы функции.
Использование nonlocal для доступа к переменным внешних функций
Ключевое слово nonlocal используется для указания, что переменная относится к окружающей функции, а не к глобальной области видимости. Оно применяется во вложенных функциях, когда требуется изменить переменную из внешней функции.
Пример:
def outer(): n = 5 def inner(): nonlocal n # ссылаемся на переменную из внешней функции n = 25 print(n) inner() # 25 print(n) # 25 outer()
В этом примере функция inner() изменяет переменную n, которая была объявлена в функции outer(), благодаря использованию ключевого слова nonlocal. Без него создавалась бы новая локальная переменная.
Заключение
Область видимости переменных в Python играет важную роль в управлении доступом к данным. Глобальные переменные доступны во всей программе, тогда как локальные переменные ограничены функциями, в которых они определены. Использование ключевых слов global и nonlocal позволяет управлять переменными в различных контекстах, изменяя глобальные переменные или переменные внешних функций.