Курс 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. Проверка файла .py на синтаксис.
  2. Модуль Operator в Python
  3. Приближение чисел в Python
  4. Функция zip() в Python
  5. Поиск индексов в списке
  6. Метод rrshift для пользовательских объектов
  7. Установка и использование Python-dateutil
  8. Экспорт данных с помощью writefile
  9. Нахождение пересечения множеств
  10. Разделение строки в Python
  11. Python Ellipsis использование
  12. Многопоточность в Python
  13. split() без разделителя
  14. Форматирование данных с помощью pprint
  15. Участие в сообществе @selectel
  16. Запрос пароля с помощью getpass
  17. Проверка типа объекта в Python
  18. Метод is_absolute() для PurePath
  19. Обработка исключений в Python
  20. Удаление дубликатов в pandas
  21. Управление памятью в Python
  22. Метод split() в Python
  23. Метод сравнения объектов в Python
  24. Вывод символов строки в Python
  25. Тестирование времени с Freezegun
  26. Получение ID процесса
  27. Транспонирование 2D-массива с помощью zip
  28. Функция all() в Python
  29. Преобразование строк в числа с плавающей запятой
  30. Работа с timedelta в Python
  31. Переменная Шредингера
  32. Работа с f-строками 2.0
  33. Функции с необязательными аргументами
  34. Метод rsub для пользовательских чисел
  35. Форматирование объектов с модулем pprint
  36. Создание графики с черепахой
  37. Работа с эмодзи в Python
  38. Хэш-функции в Python
  39. Concrete Paths — метод .with_suffix()
  40. Метод rmatmul для пользовательских матриц
  41. Python Calendar Usage
  42. Оператор обр. импликации
  43. Решатель судоку на Python с pygame
  44. Работа с атрибутом dict
  45. Обработка исключений в Python
  46. Делегирование в Python
  47. Библиотека Chartify: руководство
  48. Объединение словарей в Python

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