Курс 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. Ветвление выражения в Python
  2. Глобальные переменные в Python
  3. Показ всплывающих окон Tkinter
  4. Метод eq для сравнения объектов
  5. Декораторы в Python
  6. Генераторы по генератору
  7. Проверка строки на палиндром
  8. Оформление кода на Python
  9. Модуль xkcd: загрузка комиксов
  10. Сложение матриц в NumPy
  11. Комплексные числа в Python
  12. Аргументы *args и **kwargs
  13. Преобразование Excel в PDF с Spire.XLS
  14. Модуль array: создание и использование массивов
  15. Переопределение унарных операторов
  16. Скрытие вывода данных
  17. Печать календаря в Python
  18. Переменная с нижним подчеркиванием
  19. Удаление символа из строки
  20. Округление дробей в Python
  21. Функция product() в Python
  22. Метод matmul для умножения матриц
  23. Метод get для словаря
  24. Форматирование данных с pprint
  25. Проверка наличия элемента в списке
  26. Мониторинг памяти с Pympler
  27. Проверка подстроки в строке
  28. Переопределение метода __lshift__
  29. Работа с временем в Python
  30. Работа с изменяемыми коллекциями
  31. Комментарии в Python
  32. Подсказки при вводе данных в Python
  33. Работа с zip-архивами в Python
  34. Упрощение условных выражений с тернарным оператором
  35. Объединение множеств в Python
  36. Структура данных deque в Python
  37. Функции в одну строку
  38. Создание виртуальной среды
  39. Создание пустых функций и классов в Python
  40. Логирование с Logzero
  41. Методы обработки строк в Python
  42. Оператор in и not in в Python

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