Глобальные, локальные и nonlocal переменные в Python: понимание и применение
Понимание глобальных, локальных и nonlocal переменных в Python
Освойте использование глобальных, локальных и nonlocal переменных в Python и знайте, когда применять каждую для чистого, поддерживаемого кода.
Видео: локальные и глобальные переменные в Python
Глобальные переменные
В Python переменная, объявленная вне любой функции — на уровне модуля — является глобальной переменной. Её можно читать из любого места модуля, но для изменения внутри функции нужно объявить её с ключевым словом global.
Пример: создание и чтение глобальной переменной
x = "global"
def foo():
print("x inside:", x)
foo()
print("x outside:", x)
Вывод
x inside: global x outside: global
Попытка переопределить x без объявления его глобальным приводит к UnboundLocalError:
x = "global"
def foo():
x = x * 2
print(x)
foo()
Вывод
UnboundLocalError: local variable 'x' referenced before assignment
Чтобы изменить глобальную переменную внутри функции, используйте ключевое слово global:
x = "global"
def foo():
global x
x = x * 2
print(x)
foo()
Вывод
globalglobal
Локальные переменные
Локальная переменная определяется внутри тела функции и существует только во время её выполнения. К ней нельзя обратиться вне функции.
Пример: обращение к локальной переменной вне её области видимости
def foo():
y = "local"
foo()
print(y)
Вывод
NameError: name 'y' is not defined
Правильное определение и использование локальной переменной:
def foo():
y = "local"
print(y)
foo()
Вывод
local
Комбинирование глобальных и локальных переменных
Обычно в одном модуле используют обе области видимости. Ключевое слово global гарантирует, что переменная ссылается на экземпляр уровня модуля.
x = "global "
def foo():
global x
y = "local"
x = x * 2
print(x)
print(y)
foo()
Вывод
global global local
Когда локальная переменная имеет то же имя, что и глобальная, они независимы:
x = 5
def foo():
x = 10
print("local x:", x)
foo()
print("global x:", x)
Вывод
local x: 10 global x: 5
Nonlocal переменные
Вложенные функции могут обращаться к переменным из их обрамляющей (но не глобальной) области видимости и изменять их с помощью ключевого слова nonlocal.
def outer():
x = "local"
def inner():
nonlocal x
x = "nonlocal"
print("inner:", x)
inner()
print("outer:", x)
outer()
Вывод
inner: nonlocal outer: nonlocal
Примечание: Обновление nonlocal переменной внутри внутренней функции обновляет переменную в области видимости внешней функции.
Python
- Переменные, константы и литералы в C: полное руководство
- Ключевые слова и идентификаторы в Python: мастерство зарезервированных слов и соглашений об именовании
- Операторы, отступы и комментарии в Python: понятное руководство
- Переменные, константы и литералы в Python — подробное руководство
- Мастерство преобразования типов в Python: Полное руководство
- Мастерство ввода-вывода и импорта модулей в Python: Практическое руководство
- Ключевое слово global в Python: как и когда использовать
- Числа, преобразование типов и математика в Python: полное руководство
- Управление директориями и файлами в Python: полное руководство
- Ошибки и встроенные исключения в Python: полное руководство