Функции

Область видимости локальных переменных

Содержание курса

В прошлом уроке мы разбирались с параметрами по умолчанию и возвратом нескольких значений через кортеж. Там функции уже активно принимали данные и что-то возвращали — но мы ни разу не задались вопросом: а что происходит с переменными, которые живут внутри функции? Куда они деваются после вызова и можно ли до них добраться снаружи? Этот урок отвечает именно на этот вопрос.

Локальная переменная и область видимости

Когда Python выполняет тело функции, он создаёт для неё отдельное пространство имён — изолированную область, в которой живут все переменные, объявленные внутри. Это и есть локальная область видимости (local scope).

Любая переменная, которой вы присваиваете значение внутри функции, называется локальной переменной. Она существует ровно столько, сколько выполняется функция: появляется в момент первого присваивания и исчезает, как только функция завершает работу.

Посмотрим на простой пример:

def greet():
    message = "Привет!"
    print(message)  # работает — мы внутри функции

greet()

Внутри greet переменная message существует и доступна. Но снаружи функции её нет — она никогда не попадала в глобальное пространство имён.

Глобальное пространство имён — это «верхний уровень» программы, где живут переменные, объявленные вне любых функций. Python при поиске имени сначала смотрит в локальную область текущей функции, и только если там не нашёл — поднимается выше, в глобальную. Но обратного пути нет: глобальный код не заглядывает внутрь функции.

Можно представить это как рабочий стол в закрытой комнате. Всё, что вы кладёте на стол во время работы в этой комнате, доступно только пока вы там находитесь. Когда вы выходите и дверь закрывается — стол исчезает вместе со всем, что на нём лежало.

Важный момент: параметры функции — это тоже локальные переменные. Когда вы пишете def add(a, b), имена a и b живут только внутри add и недоступны за её пределами.

def add(a, b):
    total = a + b
    # и 'a', и 'b', и 'total' — все локальные

add(3, 5)
# здесь нет ни a, ни b, ни total

Эта изоляция — не ограничение, а защита. Благодаря ней функции не мешают друг другу: две разные функции могут использовать переменную с одним именем, например result, и они никак не пересекутся. Каждая работает со своей копией в своём пространстве.

Начать заново?

Помощник начнёт новый диалог по этой задаче. Текущая переписка останется в истории до конца срока хранения.

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

Переписка и фото хранятся 90 дней после последнего принятого сообщения. Преподаватель получит доступ к диалогу, когда вы попросите его помочь.

Проверка решения остаётся отдельным действием.