Почему Python выводит другое значение?

подскажите, пожалуйста, почему в 7 строчке моего кода выводится значение "2", а не "5". Хотелось бы услышать развернутый ответ. Заранее большое спасибо!

def func_outer():
    x = 2
    def func_inner():
        global x 
        x = 5
    func_inner()
    print(x)
func_outer()

Ответы (1 шт):

Автор решения: CrazyElf

Я добавил ещё одну переменную и сделал больше печати. Всегда добавляйте отладочную печать, когда что-то не очень понятно:

def func_outer():
    x = 2
    y = 2
    def func_inner():
        global x 
        x = 5
        nonlocal y
        y = 5
    func_inner()
    print('внутри функции')
    print('x =', x)
    print('y =', y)
func_outer()
print('снаружи функции')
print('x =', x)

Вывод:

внутри функции
x = 2
y = 5
снаружи функции
x = 5

Вы меняете глобальную переменную. Если вы хотите поменять переменную внешней функции, используйте не global, а nonlocal.

→ Ссылка