Что выведет этот код?


x = 1

def outer():
    global x
    def inner():
        global x
        x = 2
    inner()
    return x

print(outer())

Код выведет число 2.
Объяснение:
  • Переменная x объявлена глобальной.
  • Функция outer также использует глобальную переменную x.
  • Функция inner, вложенная в outer, также использует глобальную переменную x и изменяет её значение на 2.
  • Функция outer возвращает значение глобальной переменной x, которое после вызова inner() стало равным 2.

Разбор кода:

  • Сначала глобальная переменная x инициализируется значением 1.
  • Функция outer() определена. Внутри нее также используется ключевое слово global x, что означает, что функция работает с глобальной переменной x.
  • Внутри outer() определена функция inner(), которая также использует global x, указывая на использование глобальной переменной.
  • Функция inner() присваивает глобальной переменной x значение 2.
  • Функция outer() вызывает inner().
  • Функция outer() возвращает текущее значение глобальной переменной x.
  • Наконец, print(outer()) выводит значение, возвращенное функцией outer().

Порядок выполнения:

  1. x = 1: Глобальная переменная x становится равной 1.
  2. outer() вызывается.
  3. Внутри outer(), inner() вызывается.
  4. Внутри inner(), x = 2: Глобальная переменная x становится равной 2.
  5. inner() завершается.
  6. outer() возвращает текущее значение глобальной переменной x, которое равно 2.
  7. print(outer()) выводит 2.

Результат:

Код выведет 2.

Объяснение ключевых моментов:

  • Использование global x внутри обеих функций outer() и inner() указывает, что они обе работают с одной и той же глобальной переменной x.
  • Изменение x внутри inner() влияет на значение x, которое возвращает outer(), поскольку это одна и та же глобальная переменная.
0