Курс 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"
- Модуль Operator в Python
- Получение идентификатора объекта в памяти
- Избегайте пустого списка
- Создание лямбда-функций
- Атрибуты массивов в Numpy
- Раздувающийся словарь в Python
- Использование модуля __future__
- Бесконечная проверка в Python
- Поиск с помощью регулярных выражений
- Тип CodeType в Python.
- Нарезка списков в Python
- Удаление элементов из списка в Python
- Блок else в обработке исключений
- Импорт модуля из другого каталога
- Передача аргументов через **arguments
- Python OrderedDict и fromkeys() — работа с словарями
- Преобразование данных в Python
- Создание новых списков через list comprehensions
- Декораторы в Python
- Pretty-printing JSON в Python
- Анонимные функции в Python
- Вставка переменных в шаблоны Flask
- Закрытие файла в Python
- Функция zip() в Python
- split() — разделение строки
- Работа с изображениями Pillow
- Методы __repr__ и __str__ в Python
- Объединение объектов в Python
- Метод getitem для доступа к элементам последовательности
- Разделение строки с помощью re.split()
- Работа с библиотекой xkcd
- Избегание циклических зависимостей классов в Python
- Отправка поздравлений по дню рождения
- Участие в LP стейкинге Waves
- Частичное совпадение ввода
- Слияние словарей в Python 3.9
- Операции с датами в Python
- Работа с модулем bisect
- Сумма элементов списка
- Создание графики с черепахой
- Итераторы в Python
- Python и Юникод: работа с цифрами
- Атрибуты класса и экземпляра
- Блок else в циклах Python
- Непрерывная проверка в Python
- Извлечение чисел из текста
- Преобразование символов с помощью map















