Курс 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. Построение графиков в терминале с bashplotlib
  3. Генерация случайных чисел в Python
  4. Python Метод Union Множеств
  5. Слияние словарей в Python 3.9
  6. Поиск уникальных и повторяющихся элементов
  7. Создание класса в Python
  8. Оператор морж в Python 3.8
  9. Создание уникального множества
  10. Работа с файлами в Python
  11. Создание и операции с дробями
  12. Атрибуты класса и экземпляра в Python
  13. Декоратор total_ordering для класса Point
  14. Разделение строки с регулярными выражениями
  15. Работа с путями в Python
  16. Методы split() и join() — Python строк.
  17. Создание словаря через dict comprehension
  18. Оптимизация методов в Python 3.7
  19. Работа с getopt
  20. Вызов функций по строке в Python.
  21. Структуры данных в Python
  22. Основные функции и модули Python
  23. Проверка условий в Python
  24. Howdoi — получение ответов из терминала
  25. JSON в Python: модуль, dump, dumps, load
  26. Метод setdefault() в Python
  27. Вывод переменной и строки в Python
  28. Оператор in в Python
  29. Справка по импортированным модулям
  30. Избегайте пустого списка
  31. Логирование с Logzero
  32. Возврат нескольких значений из функции
  33. Метод split() для разделения строк
  34. Хранение переменных в Python.
  35. Оператор is в Python
  36. Списки в Python: основы
  37. Проблемы с dict в Python
  38. Наиболее частотные элементы с помощью Counter
  39. Python: Фильтрация списков с помощью filter()
  40. Обновление и получение данных в SQLite
  41. Разделение строк методом split()
  42. Анонимные функции в Python
  43. Безопасный доступ к значениям словаря
  44. Оператор морж в Python 3.8
  45. Глобальные переменные в Python
  46. Цикл for в Python
  47. PrettyTable: создание таблицы

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