← Все вопросы

Что такое область видимости переменных (local/global) и зачем нужен global?

Задан 10 месяцев назад1.1к просмотров3 ответа
19

Пытаюсь изменить переменную внутри функции, а снаружи она не меняется. Что-то про local и global. Объясните, что такое область видимости и когда нужно ключевое слово global?

3 ответа

27
✓ Принятый ответ — помог автору

Область видимости (scope) — это где переменная «видна». Переменная, созданная внутри функции, локальная: она живёт только внутри функции и снаружи её нет. Переменная на верхнем уровне модуля — глобальная.

Когда внутри функции ты ПРИСВАИВАЕШЬ значение переменной, Python считает её локальной — и глобальная остаётся нетронутой:

x = 10

def change():
    x = 99   # это новая локальная x

change()
print(x)  # 10, глобальная не изменилась

Чтобы изменить именно глобальную, нужно явно сказать global:

x = 10

def change():
    global x
    x = 99

change()
print(x)  # 99

Но по-хорошему global лучше избегать: чаще правильнее принять значение аргументом и вернуть результат через return, так код предсказуемее.

Игорь Михайлов про «присваивание делает переменную локальной» — вот этого не хватало в голове, мерси · 10 месяцев назад
12

Читать глобальную переменную внутри функции можно и без global. global нужен только если хочешь ей ПРИСВОИТЬ новое значение.

6

Локальная — внутри функции, глобальная — снаружи. global пробрасывает наружу.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект