Курс 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. Функция findall() для поиска вхождений строки
  2. Декораторы с аргументами в Python
  3. Перебор элементов списка в Python
  4. Атрибуты массивов в Numpy
  5. Извлечение аудио из видео
  6. Python union() функция — объединение множеств
  7. Объединение словарей в Python
  8. Форматирование строк в Python.
  9. Создание новых списков в Python
  10. Основы Python
  11. Установка и использование howdoi
  12. Запуск внешнего кода в Jupyter
  13. Работа с индексами списков
  14. Класс-оболочка для словарей
  15. Python: библиотеки и функции
  16. Отладка производительности Python
  17. Генератор списка с условием if
  18. Декораторы классов
  19. Переменные класса и экземпляра
  20. Python Менеджер контекста
  21. Именованные срезы в Python
  22. Функция zip() в Python
  23. Установка Git и AWS CLI
  24. Работа с изображениями PIL
  25. Особенности запятых в Python
  26. Получение пути к текущему скрипту с помощью os
  27. Получение значений из словарей
  28. Создание пар из последовательностей
  29. Атрибуты класса и экземпляра
  30. Атрибуты класса и экземпляра
  31. Слияние словарей в Python 3.9
  32. Управление фоновыми задачами в Python
  33. Дизассемблирование Python кода
  34. Замена переменных в Python
  35. Flask — веб-фреймворк Python
  36. Сериализация объектов в Python
  37. Переопределение метода __eq__
  38. Повторение элементов в Python
  39. Оператор @ для умножения матриц
  40. Фильтрация входных данных в Python
  41. Многострочные строки в Python
  42. Округление банкира в Python
  43. Вычисление натурального логарифма в NumPy
  44. Объединение множеств в Python
  45. Создание обратного итератора
  46. Изменения в обработке логических значений
  47. Сокращение ссылок с pyshorteners
  48. Сортировка с помощью key
  49. Итераторы в Python

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