Что такое область видимости переменных (local/global) и зачем нужен global?
Пытаюсь изменить переменную внутри функции, а снаружи она не меняется. Что-то про local и global. Объясните, что такое область видимости и когда нужно ключевое слово global?
3 ответа
Область видимости (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, так код предсказуемее.
Читать глобальную переменную внутри функции можно и без global. global нужен только если хочешь ей ПРИСВОИТЬ новое значение.
Локальная — внутри функции, глобальная — снаружи. global пробрасывает наружу.