В чем разница между локальной и глобальной переменной?

Ответ

Локальная переменная объявляется внутри функции, метода или блока кода и доступна только в пределах этой области видимости.

Глобальная переменная объявляется вне каких-либо функций и доступна из любого места программы (модуля).

Пример на Python:

global_counter = 0  # Глобальная переменная

def increment():
    local_value = 10  # Локальная переменная
    global global_counter
    global_counter += local_value
    return global_counter

print(increment())  # Выведет: 10
print(global_counter)  # Выведет: 10 (глобальная изменена)
print(local_value)  # NameError: name 'local_value' is not defined
Ключевые различия: Аспект Локальная переменная Глобальная переменная
Область видимости Внутри блока, где объявлена Везде в модуле/программе
Время жизни Создается при входе в блок, уничтожается при выходе Существует всю работу программы
Доступность Только внутри своей функции Из любой функции (требует осторожности)
Использование Для временных данных внутри алгоритма Для хранения состояния, общего для нескольких функций

Почему важно: Чрезмерное использование глобальных переменных усложняет понимание кода, тестирование и leads to side effects, так как любая функция может их изменить. Локальные переменные инкапсулируют состояние.

Ответ 18+ 🔞

А, ну вот, классика, блядь! Сидишь такой, пишешь код, и тут — бац! — переменные, сука, лезут со всех щелей. Одни только в одной комнатшке живут, другие по всей хате шастают. Сейчас разберём этот цирк с конями.

Смотри, есть локальная переменная. Это как твой личный заначек в тумбочке. Объявляешь её внутри функции, метода или какого-нибудь if-блока, и живёт она только там, в этой своей каморке. Вышел из функции — и всё, её как не бывало, испарилась, в рот меня чих-пых! Никто снаружи про неё не знает и знать не хочет.

А есть глобальная переменная. Это уже не тумбочка, это, блядь, общий холодильник на всю коммуналку (то есть на весь модуль). Объявил её снаружи всех функций — и теперь каждая функция может туда заглянуть и сожрать твой йогурт, то есть значение поменять. Доступна отовсюду, живёт вечно, пока программа не кончится.

Вот, смотри на примере, тут всё чётко, код не трогаем:

global_counter = 0  # Это наш общий холодильник. Глобальная, мать её.

def increment():
    local_value = 10  # А это личная тумбочка внутри функции. Локальная.
    global global_counter  # Говорим: "Слушай, я сейчас буду в общий холодильник лазить!"
    global_counter += local_value  # Достаём из тумбочки 10 и кладём в холодильник.
    return global_counter

print(increment())  # Выведет: 10. Всё ок.
print(global_counter)  # Выведет: 10. Холодильник теперь не пустой.
print(local_value)  # А тут — NameError! Тумбочку-то снаружи не видно, ёпта!

Короче, чтобы ты не запутался, вот тебе табличка, как в школе, только без соплей:

Что сравниваем Локальная переменная (Тумбочка) Глобальная переменная (Холодильник)
Где видна Только в своей комнате (блоке кода) Везде, по всей хате (модулю)
Сколько живёт Пока дверь в комнату открыта. Вышел — похерил. Живёт, пока вся программа не накрылась медным тазом.
Кто может трогать Только тот, кто в комнате. Все, блядь, кому не лень. Любая функция.
Зачем нужна Для временных дел, чтоб мусор не раскидывать. Для хранения какого-то общего состояния.

А теперь самое важное, почему это пиздец как важно: Если ты начнёшь всё подряд пихать в общий холодильник (глобальные переменные), то будет пиздец. Одна функция положила селёдку, другая — торт, а третья, сука, всё это перемешает. Отследить, кто и когда что поменял, — это тот ещё квест. Код превращается в сплошные side effects, тестировать его невозможно, понимать — тем более. Локальные переменные — они как раз для порядка: закрылся в своей функции, навёл там свои дела, никому не мешаешь. Инкапсуляция, блядь, называется!