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


def outer():
    def inner():
        return "OK"
    return inner

f = outer()
print(f())

Функция outer возвращает функцию inner.

Когда вызывается f() (где f это результат вызова outer()), выполняется функция inner.

Функция inner возвращает строку "OK".

Следовательно, на экран будет выведено "OK".


Разбор задачи:

Эта задача демонстрирует концепцию замыкания (closure) в Python.

Объяснение кода:

  • Функция outer() определяет внутреннюю функцию inner().
  • Функция inner() просто возвращает строку "OK".
  • outer() возвращает функцию inner (а не результат её вызова). Это ключевой момент замыкания. Функция `inner` сохраняет доступ к области видимости, в которой она была определена (в данном случае, область видимости `outer`).
  • Затем вызывается outer(), и возвращённая функция (inner) присваивается переменной f.
  • Наконец, вызывается f(), что эквивалентно вызову inner().

Результат выполнения:

Код выведет на экран:

OK

Замыкание:

Замыкание возникает, когда внутренняя функция (inner) захватывает переменные из лексического окружения внешней функции (outer). В данном примере inner захватывает окружение outer, хотя в данном конкретном случае она не использует какие-либо переменные из этого окружения. Замыкания позволяют "запомнить" состояние внешней функции после того, как она завершила свою работу.

0