Глобальные, локальные и нелокальные переменные в Python
В этом руководстве вы узнаете о глобальных, локальных и нелокальных переменных в Python и о том, где и как их использовать.
Глобальные переменные
В Python переменная, объявленная вне функции или в глобальной области видимости, называется глобальной переменной. К глобальной переменной можно получить доступ как внутри, так и вне функции.
Давайте посмотрим на примере, как в Python создается глобальная переменная.
Пример 1. Создаем глобальную переменную
x = "глобальная переменная"
def foo():
print("x внутри функции:", x)
foo()
print("x вне функции:", x)
Вывод:
x внутри функции: глобальная переменная
x вне функции: глобальная переменная
В приведенной выше программе мы создали глобальную переменную x и задали функцию foo(), которая выводит на экран значение x. В коде программы мы вызвали функцию foo(), которая напечатала значение x внутри функции. Как вы видите, оно совпадает со значением x вне функции.
А что если нужно изменить значение x внутри функции?
x = "глобальная переменная"
def foo():
x = x * 2
print(x)
foo()
Вывод:
UnboundLocalError: local variable 'x' referenced before assignment
Python выдает ошибку, потому что он обрабатывает x как локальную переменную, но x при этом не определена внутри функции foo().
Чтобы исправить эту ошибку, нам понадобится ключевое слово global. О том, что это такое и как оно работает, подробнее можете почитать в статье «Ключевое слово global».
Локальные переменные
Переменная, объявленная внутри тела функции или в локальной области видимости, называется локальной переменной.
Пример 2. Доступ к локальной переменной вне области видимости
def foo():
y = "локальная переменная"
foo()
print(y)
Вывод:
NameError: name 'y' is not defined
Python выдает ошибку, потому что мы пытаемся получить доступ к локальной переменной y в глобальной области видимости. Так делать нельзя: локальная переменная y «существует» только внутри функции foo().
Давайте рассмотрим пример, который демонстрирует, как в Python создаются локальные переменные.
Пример 3. Создаем локальную переменную
Мы создаем локальные переменные, когда, например, объявляем переменные внутри функции.
def foo():
y = "локальная переменная"
print(y)
foo()
Вывод:
локальная переменная
Теперь вернитесь к программе, в которой x была глобальной переменной, а нам нужно было изменить эту переменную внутри функции foo().
Глобальные и локальные переменные
В этом разделе мы поговорим о том, как использовать глобальные и локальные переменные в одной программе.
Пример 4. Локальные и глобальные переменные в одной программе
x = "глобальная переменная"
def foo():
global x
y = "локальная переменная"
x = x * 2
print(x)
print(y)
foo()
Вывод:
глобальная переменная глобальная переменная
локальная переменная
В приведенном выше программе мы объявили глобальную переменную x и локальную переменную y внутри функции foo(). Затем мы использовали оператор умножения, чтобы изменить глобальную переменную x, и вывели на экран значения переменных x и y.
После вызова функции foo() значение x становится равным "глобальная переменная глобальная переменная", потому что внутри функции строка "глобальная переменная" умножается на два. Затем функция foo() выводит на экран новое значение x и значение переменной y — "локальная переменная".
Пример 5. Глобальная и локальная переменные с одинаковым именем
x = 5
def foo():
x = 10
print("локальная переменная x:", x)
foo()
print("глобальная переменная x:", x)
Вывод:
локальная переменная x: 10
глобальная переменная x: 5
В приведенной выше программе мы использовали одно и то же имя x как для глобальной переменной, так и для локальной переменной. Python выводит разные значения переменных x, потому что локальная переменная объявлена внутри функции `foo()`, а другая — вне ее, то есть в глобальной области видимости.
Когда мы печатаем переменную x внутри функции foo(), на экран выводится сообщение "локальная переменная x: 10". Это называется локальной областью видимости переменной.
Когда мы печатаем переменную x за пределами foo(), на экран выводится сообщение "глобальная переменная x: 5". Это называется глобальной областью видимости переменной.
Нелокальные переменные
Нелокальные переменные используются во вложенных функциях, локальная область видимости которых не определена. Это означает, что переменная может не находиться ни в локальной, ни в глобальной области.
Давайте на примере рассмотрим, как нелокальная переменная работает в Python.
Для этого нам понадобится ключевое слово nonlocal.
Пример 6. Создаем нелокальную переменную
def outer():
x = "локальная переменная"
def inner():
nonlocal x
x = "нелокальная переменная x"
print("вложенная функция:", x)
inner()
print(":", x)
outer()
Вывод:
вложенная функция: нелокальная переменная x
: нелокальная переменная x
В приведенной выше программе есть вложенная функция inner(). Для создания нелокальной переменной мы используем ключевое слово nonlocal. Функция inner() определяется внутри функции outer().
Примечание. Если мы изменим значение нелокальной переменной, изменится и значение локальной переменной.
Закрепите практикой
Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.