← Назад ко всем вопросам

Что такое область видимости и как работает nonlocal/global?

1️⃣ Как кратко ответить

Область видимости определяет, где в коде можно использовать переменные. В Python есть четыре уровня области видимости: локальная, вложенная, глобальная и встроенная. Ключевое слово global позволяет изменять глобальные переменные внутри функции, а nonlocal — изменять переменные из внешней, но не глобальной области видимости.

2️⃣ Подробное объяснение темы

Область видимости в программировании — это контекст, в котором определены переменные и в котором они могут быть использованы. В Python существует несколько уровней области видимости, которые определяют, где и как можно использовать переменные.

Уровни области видимости в Python

  1. Локальная область видимости (Local Scope):

    • Переменные, объявленные внутри функции, доступны только в этой функции.
    • Они создаются при вызове функции и уничтожаются после её завершения.
  2. Вложенная область видимости (Enclosed Scope):

    • Переменные, объявленные в функции, которая вложена в другую функцию.
    • Эти переменные доступны в функции, где они объявлены, и во всех вложенных в неё функциях.
  3. Глобальная область видимости (Global Scope):

    • Переменные, объявленные на уровне модуля, доступны во всём модуле.
    • Они создаются при запуске программы и уничтожаются при её завершении.
  4. Встроенная область видимости (Built-in Scope):

    • Переменные, которые всегда доступны в Python, такие как функции len(), print(), и т.д.

Ключевые слова global и nonlocal

global

Ключевое слово global используется для указания на то, что переменная находится в глобальной области видимости. Это позволяет изменять глобальные переменные внутри функции.

x = 10  # Глобальная переменная
​
def modify_global():
    global x  # Указываем, что будем использовать глобальную переменную x
    x = 20  # Изменяем значение глобальной переменной
​
modify_global()
print(x)  # Выведет 20, так как глобальная переменная была изменена
  • x = 10: Объявление глобальной переменной x.
  • global x: Указывает, что x — это глобальная переменная.
  • x = 20: Изменяет значение глобальной переменной x.

nonlocal

Ключевое слово nonlocal используется для изменения переменных, которые находятся в области видимости, отличной от локальной и глобальной, то есть в замыкании.

def outer_function():
    y = 5  # Переменная в области видимости внешней функции
​
    def inner_function():
        nonlocal y  # Указываем, что будем использовать переменную из внешней функции
        y = 10  # Изменяем значение переменной из внешней функции
​
    inner_function()
    print(y)  # Выведет 10, так как переменная из внешней функции была изменена
​
outer_function()
  • y = 5: Переменная y объявлена в области видимости outer_function.
  • nonlocal y: Указывает, что y — это переменная из внешней функции.
  • y = 10: Изменяет значение переменной y из внешней функции.

Зачем это нужно

Понимание областей видимости и использование global и nonlocal позволяет управлять доступом и изменением переменных в разных частях программы. Это важно для предотвращения ошибок, связанных с изменением переменных в неожиданных местах, и для создания более читаемого и поддерживаемого кода.

Тема: Python
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки