Курс 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. Уникальные значения из списка
  2. Применение функции к списку
  3. Функция enumerate() в Python
  4. PrettyTable: создание таблицы
  5. Сортировка и разворот списка
  6. Создание списков в Python
  7. Удаление файлов с shutil.os.remove()
  8. Создание новых списков через list comprehensions
  9. Получение атрибутов и методов класса
  10. Подсчет количества элементов в списке
  11. Умножение строк и списков
  12. Переменная с нижним подчеркиванием
  13. Протокол управления контекстом
  14. Ввод нескольких значений
  15. Отрицательные индексы списков в Python
  16. Основные функции и модули Python
  17. Мощь вложенных функций в Python
  18. Создание словаря и множества
  19. Форматирование строк в Python
  20. Создание панели меню Tkinter
  21. Создание списка дат
  22. Проверка строки на палиндром
  23. Деление в Python
  24. Непрерывная проверка в Python
  25. Регулярные выражения: метод match
  26. Курс Data Scientist в медицине
  27. Получение текущей директории
  28. Метод eq для сравнения объектов
  29. Использование обратной косой черты в f-строках
  30. Функция map() и ленивая оценка
  31. Константы в модуле cmath
  32. Создание namedtuple списком полей
  33. Создание словарей и множеств в Python.
  34. Преобразование вложенного списка
  35. Методы list в Python
  36. Оператор морж в Python 3.8
  37. Работа с переменными в Python
  38. Форматирование кода на Python
  39. Принципы Zen of Python
  40. Функция format() в Python
  41. Операции с датами в Python
  42. Объединение итераторов
  43. Генератор бросков кубиков
  44. Оптимизация создания строк
  45. Работа с комплексными числами в Python
  46. Работа с очередями в Python
  47. Множественное присваивание в Python
  48. Проблема сравнения словарей
  49. OrderedDict — упорядоченный словарь
  50. Быстрый поиск кода

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