Курс 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. Отслеживание прогресса с tqdm
  2. Метод setdefault() в Python
  3. Проверка типа объекта в Python
  4. Функциональное программирование.
  5. Проверка типов с помощью isinstance
  6. Область видимости переменных
  7. Списки в Python: основы
  8. Установка и использование Python-dateutil
  9. Метод remove() для удаления элемента из списка
  10. Хеши в Python
  11. Расчет времени выполнения
  12. Декоратор Ajax required
  13. Работа с изменяемыми коллекциями
  14. Принципы программирования
  15. Модуль xkcd: добавление юмора в Python
  16. Кортеж в Python: создание и использование
  17. Новшества Flask 2.0
  18. Открытие и запись файлов
  19. Создание и использование модулей в Python
  20. Переменная Шредингера
  21. Извлечение аудио из видео
  22. Создание генераторов
  23. Синхронизация доступа к ресурсам
  24. Создание таблиц в Python с PrettyTable
  25. discard() — удаление элемента из множества
  26. Работа с необработанными строками
  27. Распаковка аргументов в Python
  28. Структурирование именованных констант
  29. Шаблоны и наследование в Flask
  30. Обратный список чисел
  31. Возврат нескольких значений
  32. Реверс строки в Python
  33. Компиляция регулярных выражений
  34. Метод __call__ в Python
  35. Игра «Камень, ножницы, бумага» — Python
  36. Конкатенация строковых литералов
  37. Резервирование символов в Python
  38. Символ подчеркивания в Python
  39. Освобождение памяти в Python
  40. Транспонирование 2D-массива с помощью zip
  41. Замена символов в строке
  42. Расширение информации об ошибке в Python
  43. Оператор «or» в Python

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