def outer():
    x = 7
    def inner():
        nonlocal x
        x = 20
    inner()
    return x
print(outer())
outer возвращает 20.  nonlocal x в функции inner позволяет изменять переменную x в ближайшей внешней области видимости, не являющейся глобальной.  Таким образом, inner изменяет x в outer, и outer возвращает измененное значение.
Код:
def outer():
  x = 7
  def inner():
    nonlocal x
    x = 20
  inner()
  return x
print(outer())
  Объяснение:
outer определяет переменную x и присваивает ей значение 7.outer определена вложенная функция inner.inner используется ключевое слово nonlocal x. Это указывает на то, что переменная x, к которой обращается inner, находится в ближайшей внешней области видимости, которая не является глобальной. В данном случае, это переменная x в функции outer.inner изменяет значение x на 20.  Благодаря nonlocal, меняется именно переменная x, объявленная в outer.inner вызывается внутри outer.outer возвращает значение x. Поскольку inner изменила значение x, outer вернет 20.outer(), и результат (20) выводится на экран.Результат:
20