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


x = 1


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

    inner()
    return x


print(outer())

Код выведет число 2. Внутренняя функция inner() изменяет глобальную переменную x, используя ключевое слово global. Поэтому, когда outer() возвращает x, возвращается измененное значение (2), а не локальная переменная.

Разберем код по шагам, чтобы понять, что будет выведено. Важно понимать, как работают области видимости (scope) и ключевое слово global в Python.

  1. Глобальная переменная x: Сначала в глобальной области видимости определяется переменная x и ей присваивается значение 1.
  2. Функция outer(): Определяется функция outer().
  3. Функция inner(): Внутри outer() определяется функция inner().
  4. global x в inner(): Внутри inner() используется ключевое слово global x. Это означает, что внутри inner() переменная x относится к глобальной переменной x, а не к локальной переменной с тем же именем.
  5. x = 2 в inner(): Затем глобальной переменной x присваивается значение 2. Важно, что это изменение происходит *глобально*.
  6. Вызов inner(): Функция inner() вызывается внутри outer(). После этого вызова, глобальная переменная x теперь имеет значение 2.
  7. return x в outer(): Функция outer() возвращает значение x. Так как inner() изменила глобальную переменную x, функция outer() возвращает текущее значение глобальной переменной x, которое равно 2.
  8. print(outer()): Вызывается функция outer(), и её возвращаемое значение (2) выводится на экран.

Таким образом, программа выведет 2.

Вывод:

2
0