В Python при попытке изменить значение глобальной переменной внутри функции, не объявив её как global
, будет создана локальная переменная с таким же именем. Изменение этой локальной переменной не повлияет на значение глобальной переменной. При обращении к переменной внутри второй функции без global
будет использована локальная переменная, а глобальная останется неизменной.
Если в функции объявить переменную как global
, то эта переменная будет ссылаться на глобальную область видимости. Это означает, что любое изменение этой переменной внутри данной функции повлияет на глобальную переменную с тем же именем.
Теперь рассмотрим случай, когда внутри другой функции попытаться изменить значение этой же глобальной переменной, но без использования ключевого слова global
. В этом случае Python создаст локальную переменную с тем же именем в области видимости этой второй функции. Изменение этой локальной переменной не повлияет на глобальную переменную, объявленную с global
в первой функции.
По сути, произойдет "затенение" (shadowing) глобальной переменной. При обращении к переменной внутри второй функции без global
будет использоваться именно локальная переменная, а глобальная останется неизменной.
Пример:
global_var = 10
def func_global():
global global_var
global_var = 20 # Изменяет глобальную переменную
def func_local():
global_var = 30 # Создает ЛОКАЛЬНУЮ переменную global_var
print(f"Глобальная переменная до изменений: {global_var}") # Выведет 10
func_global()
print(f"Глобальная переменная после func_global(): {global_var}") # Выведет 20
func_local()
print(f"Глобальная переменная после func_local(): {global_var}") # Выведет 20 (НЕ 30, так как func_local работала с локальной переменной)
Вывод: Без использования global
вторая функция создаст и будет работать с локальной переменной, оставляя глобальную переменную нетронутой.