Как работают операторы global и nonlocal в Python?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Операторы global и nonlocal используются для работы с переменными, которые находятся вне текущей области видимости:
-
global: Позволяет изменять переменную, находящуюся в глобальной области видимости (на уровне модуля), изнутри функции или другого блока кода. Без использованияglobal, присвоение переменной внутри функции создает новую локальную переменную, а не изменяет существующую глобальную.// Пример использования global x = 10 // Глобальная переменная def my_function(): global x // Объявляем, что хотим работать с глобальной переменной x x = 20 // Изменяем глобальную переменную y = 30 // Локальная переменная my_function() // print(x) // Выведет 20 // print(y) // Вызовет NameError -
nonlocal: Используется вложенными функциями для изменения переменных из ближайшей объемлющей (но не глобальной) области видимости. Полезно, когда нужно изменить переменную родительской функции из дочерней.// Пример использования nonlocal def outer_function(): x = 10 // Переменная в объемлющей области видимости def inner_function(): nonlocal x // Объявляем, что хотим работать с переменной x из объемлющей области видимости x = 20 // Изменяем переменную outer_function y = 30 // Локальная переменная inner_function() // print(x) // Выведет 20 // print(y) // Вызовет NameError outer_function()
Основные отличия:
| Оператор | Область видимости, с которой работает | Применение | Требуется для изменения |
|---|---|---|---|
global |
Глобальная область видимости (модуль) | Изменение глобальных переменных из функций | Да |
nonlocal |
Ближайшая объемлющая (не глобальная) | Изменение переменных родительских функций | Да |
Важно помнить, что изменение переменных извне локальной области видимости может сделать код менее читаемым и затруднить отладку. Их следует использовать обдуманно.