Разбор поведения лямбда-функций в Python

Разбор поведения лямбда-функций в Python

@python_quiz

Разберем этот квиз, в котором нам предложено понять поведение лямбда-функций в Python. Рассмотрим следующий код:

funcs = [lambda x: x + i for i in range(3)]
for f in funcs:
    print(f(0))

Что происходит в коде?

В этом фрагменте кода мы создаем список лямбда-функций, используя генератор. Каждая лямбда-функция добавляет к своему аргументу x значение переменной i, которая изменяется в цикле for.

Анализ переменной i

На первый взгляд может показаться, что каждая функция запоминает свое собственное значение i, но это не так. Все лямбда-функции ссылаются на одну и ту же переменную i. В итоге, когда цикл завершится, значение i будет равно 2 (последнему значению в range(3)).

Выполнение лямбда-функций

Теперь, когда мы вызываем каждую из этих функций с аргументом 0, они будут добавлять к нему значение i, которое равно 2:

print(f(0))  # f(0) = 0 + 2

Таким образом, результатом каждого вызова будет:

2

Возможные варианты ответов

В квизе нам предложены следующие варианты ответов:

  1. 0, 1, 2
  2. 3, 4, 7
  3. 0, 0, 0
  4. 2, 2, 2

Правильный ответ

Как мы выяснили, все функции возвращают 2, следовательно, правильный ответ — 2, 2, 2 (индекс 3 в options).

Заключение

Этот пример наглядно демонстрирует, как важно понимать область видимости переменных в Python. Лямбда-функции не создают собственные копии переменных из окружающего контекста, а ссылаются на них. Это может привести к неожиданным результатам, если не учитывать, как работает область видимости.

Используйте этот случай как урок, чтобы лучше понимать, как работают функции и замыкания в Python!

Report Page