Назад | Python 3 учебник | Вперёд
Область видимости переменной — та область, внутри которой переменная видна.
В Python 3 существует три области видимости:
Локальная область видимости
Локальная область видимости используется по умолчанию. Когда вы объявляете переменную, то она доступна только внутри функции, в которой объявлена:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
x = 10 def func1(a, b): x = 11 print("before") print(x) def func2(c, d): x = 12 print(x) return c + d func2(3, 4) print("after") print(x) return a + b func1(1, 2) print("at the end") print(x) |
Вставьте этот код в Spyder 3 и запустите. В консоли выведется следующее:
1 2 3 4 5 6 7 |
before 11 12 after 11 at the end 10 |
В начале мы объявили переменную x и присвоили ей значение 10. Но внутри функции func1 мы объявляем ещё одну переменную x и присваиваем ей значение 11. Внутри функции func1 внешняя переменная x не видна. Мы не можем к ней обратиться. Внутри функции видны только переменные, объявленные внутри этой функции и её параметры. Поэтому внутри функции мы видим значение 11.
Затем мы объявляем ещё одну функцию func2, внутри которой объявляем ещё одну переменную x со значением 12. Внутри func2 мы не видим внешнюю x со значением 11 и не видим x со значением 10. Нам доступна только x со значением 12.
Посмотрите на следующий код:
1 2 3 4 5 6 |
x = 10 def func1(a, b): print(x) return a + b print (x) func1(1, 2) |
Результатом работы этого кода будет:
1 2 |
10 10 |
В данном случае мы можем обратиться к значению переменной вне функции, так как внутри функции мы не объявляли переменных с таким именем.
Но следующий код уже не будет работать:
1 2 3 4 5 6 7 8 9 10 |
x = 10 def func1(a, b): print(x) # Здесь будет ошибка. # Пытаемся обратиться к переменной # до объявления x = 5 print(x) return a + b print (x) func1(1, 2) |
Глобальная область видимости
С помощью ключевого слова global мы можем разрешить использование переменной, объявленной внутри функции, последующему блоку кода.. Пример:
1 2 3 4 5 6 7 8 9 |
def func1(): global x print(x) x = 5 print(x) x = 10 func1() print(x) |
Результат работы этого кода будет следующим:
1 2 3 |
10 5 5 |
Область видимости nonlocal
Была добавлена в Python 3. Она отличается от global тем, что требует, чтобы переменные уже существовали. А также она ограничивает область поиска уже существующих переменных, так как исключает из неё глобальные переменные модуля и переменные текущей функции
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
x = 3 def func1(): # nonlocal x Нельзя, глобальную не видим x = 10 def func_inner(): nonlocal x # ОК x += 1 return x return func_inner counter = func1() print(counter()) print(counter()) print(counter()) |
Результат:
1 2 3 |
11 12 13 |
Вот так.
Назад | Python 3 учебник | Вперёд