Назад к вопросам
Middle
121
questionbank

Как работают операторы 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 Ближайшая объемлющая (не глобальная) Изменение переменных родительских функций Да

Важно помнить, что изменение переменных извне локальной области видимости может сделать код менее читаемым и затруднить отладку. Их следует использовать обдуманно.