Курс 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"
- Ветвление выражения в Python
- Глобальные переменные в Python
- Показ всплывающих окон Tkinter
- Метод eq для сравнения объектов
- Декораторы в Python
- Генераторы по генератору
- Проверка строки на палиндром
- Оформление кода на Python
- Модуль xkcd: загрузка комиксов
- Сложение матриц в NumPy
- Комплексные числа в Python
- Аргументы *args и **kwargs
- Преобразование Excel в PDF с Spire.XLS
- Модуль array: создание и использование массивов
- Переопределение унарных операторов
- Скрытие вывода данных
- Печать календаря в Python
- Переменная с нижним подчеркиванием
- Удаление символа из строки
- Округление дробей в Python
- Функция product() в Python
- Метод matmul для умножения матриц
- Метод get для словаря
- Форматирование данных с pprint
- Проверка наличия элемента в списке
- Мониторинг памяти с Pympler
- Проверка подстроки в строке
- Переопределение метода __lshift__
- Работа с временем в Python
- Работа с изменяемыми коллекциями
- Комментарии в Python
- Подсказки при вводе данных в Python
- Работа с zip-архивами в Python
- Упрощение условных выражений с тернарным оператором
- Объединение множеств в Python
- Структура данных deque в Python
- Функции в одну строку
- Создание виртуальной среды
- Создание пустых функций и классов в Python
- Логирование с Logzero
- Методы обработки строк в Python
- Оператор in и not in в Python















