Область видимости переменной указывает область, в которой мы можем получить доступ к переменной. В Python мы можем объявлять переменные в трех разных областях видимости: локальной, глобальной и нелокальной.
Локальные переменные в Python
Когда мы объявляем переменные внутри функции, эти переменные будут иметь локальную область видимости. Мы не можем получить к ним доступ вне функции. Эти типы переменных называются локальными переменными. Например:
1 2 3 4 5 6 7 8 9 10 11 12 |
def greet(): # Локальная переменная message = 'Hello' print('Local', message) greet() # Пытаемся получить доступ к переменной message # вне функции greet() print(message) |
Результат:
Local Hello
NameError: name 'message' is not defined
Здесь переменная message
является локальной переменной функции greet(), поэтому доступ к ней возможен только внутри этой функции. Именно поэтому в результате мы увидели сообщение об ошибке, когда попытались получить доступ к переменной message
вне функции greet().
Чтобы решить эту проблему, мы можем сделать переменную message
глобальной.
Глобальные переменные в Python
В Python переменная, объявленная вне функции или в глобальной области видимости, называется глобальной переменной. Это означает, что глобальная переменная может быть доступна как внутри, так и вне функции.
Давайте рассмотрим пример создания глобальной переменной в Python:
1 2 3 4 5 6 7 8 9 |
# Объявляем глобальную переменную message = 'Hello' def greet(): # Объявляем локальную переменную print('Local', message) greet() print('Global', message) |
Результат:
Local Hello
Global Hello
На этот раз мы можем получить доступ к переменной message
извне функции greet(), так как это глобальная переменная.
Нелокальные переменные в Python
В Python нелокальные переменные используются во вложенных функциях, локальная область видимости которых не определена. Это означает, что переменная не находится ни в локальной, ни в глобальной области видимости.
Ключевое слово nonlocal используется для создания нелокальных переменных. Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# Внешняя функция def outer(): message = 'local' # Вложенная функция def inner(): # Объявляем нелокальную переменную nonlocal message message = 'nonlocal' print("inner:", message) inner() print("outer:", message) outer() |
Результат:
inner: nonlocal
outer: nonlocal
Здесь функция inner() является вложенной функцией. Мы использовали ключевое слово nonlocal
для создания нелокальной переменной. Функция inner() определена в области видимости функции outer().
Примечание: Если мы изменим значение нелокальной переменной, то изменения отобразятся в локальной переменной.