Курс 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. Модуль Operator в Python
  2. Получение идентификатора объекта в памяти
  3. Избегайте пустого списка
  4. Создание лямбда-функций
  5. Атрибуты массивов в Numpy
  6. Раздувающийся словарь в Python
  7. Использование модуля __future__
  8. Бесконечная проверка в Python
  9. Поиск с помощью регулярных выражений
  10. Тип CodeType в Python.
  11. Нарезка списков в Python
  12. Удаление элементов из списка в Python
  13. Блок else в обработке исключений
  14. Импорт модуля из другого каталога
  15. Передача аргументов через **arguments
  16. Python OrderedDict и fromkeys() — работа с словарями
  17. Преобразование данных в Python
  18. Создание новых списков через list comprehensions
  19. Декораторы в Python
  20. Pretty-printing JSON в Python
  21. Анонимные функции в Python
  22. Вставка переменных в шаблоны Flask
  23. Закрытие файла в Python
  24. Функция zip() в Python
  25. split() — разделение строки
  26. Работа с изображениями Pillow
  27. Методы __repr__ и __str__ в Python
  28. Объединение объектов в Python
  29. Метод getitem для доступа к элементам последовательности
  30. Разделение строки с помощью re.split()
  31. Работа с библиотекой xkcd
  32. Избегание циклических зависимостей классов в Python
  33. Отправка поздравлений по дню рождения
  34. Участие в LP стейкинге Waves
  35. Частичное совпадение ввода
  36. Слияние словарей в Python 3.9
  37. Операции с датами в Python
  38. Работа с модулем bisect
  39. Сумма элементов списка
  40. Создание графики с черепахой
  41. Итераторы в Python
  42. Python и Юникод: работа с цифрами
  43. Атрибуты класса и экземпляра
  44. Блок else в циклах Python
  45. Непрерывная проверка в Python
  46. Извлечение чисел из текста
  47. Преобразование символов с помощью map

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