Курс Python → Лямбда-функции в цикле

Анонимные функции (lambda) в Python могут быть определены в цикле с разными значениями, однако они могут вернуть один и тот же результат. Это происходит потому, что переменная x, которая используется в лямбда-функции, не является локальной для этой функции, а определена во внешней области видимости. При вызове лямбда-функции, она обращается к значению x, которое существует в момент вызова, а не в момент определения.

В случае, когда лямбда-функции определены в цикле, переменная x будет иметь последнее значение, которое ей было присвоено после завершения цикла. Например, если в конце цикла x=4, то все лямбда-функции, определенные в этом цикле, будут возвращать результат 4**2, то есть 16. Это объясняет почему все лямбда-функции, определенные в цикле, могут вернуть одинаковый результат.

Для проверки этого поведения можно изменить значение переменной x и посмотреть на результат, который возвращают лямбда-функции. Если значение x изменено до вызова лямбда-функции, то результат также изменится соответственно новому значению x.


x = 5
functions = [lambda: x**2 for x in range(5)]
for func in functions:
    print(func())

В данном примере создается список из пяти лямбда-функций, каждая из которых возвращает квадрат значения переменной x. После этого происходит итерация по списку функций и их вызов. В результате на экране будут выведены значения 0, 1, 4, 9 и 16, соответствующие квадратам значений переменной x от 0 до 4.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Оформление кода по PEP 8
  2. Тестирование времени с Freezegun
  3. Преобразование многоуровневого словаря
  4. Методы HTTP запросов в Flask
  5. Функция product() в Python
  6. Форматирование строк в Python.
  7. Работа с collections.Counter
  8. Срез списка в Python
  9. Переопределение метода __eq__
  10. Работа с Telegram API на Python
  11. Метод enumerate() в Python
  12. Документация функции help() в Python
  13. Итераторы с потерямиZIP
  14. Функция reduce() из модуля functools
  15. Нахождение пересечения множеств
  16. Группировка элементов в словарь
  17. Удаление первого элемента списка
  18. Протокол управления контекстом
  19. Проверка однородности элементов списка
  20. Работа с изображениями PIL
  21. Операция += для списков
  22. Список и кортеж в Python
  23. Тестирование с unittest
  24. Проверка строки на палиндром
  25. Сравнение def и lambda в Python
  26. Сортировка с помощью key
  27. Рекурсия для обращения строки
  28. Структуры данных в Python
  29. Отладка кода
  30. Сериализация и десериализация объектов
  31. Анализ кода — Python
  32. Декораторы с аргументами
  33. Управление памятью в numpy.
  34. Анонимные функции в Python
  35. Управление асинхронными задачами на Python.
  36. CSV строка разделение в Python
  37. Списковое включение в Python
  38. Работа с классами данных
  39. Оператор is в Python
  40. Создание словарей в Python
  41. Переворот списка в Python
  42. Выход из профиля в Django
  43. Заказ карты Тинькофф Black
  44. Капитализация строк

Marketello читают маркетологи из крутых компаний