Этот вопрос частенько фигурирует среди запросов разработчиков любого грейда. Эта концепция немного сложнее, чем кажется на первый взгляд. Так что предлагаем вам приём для запоминания.
Символ λ отдалённо напоминает молнию, и ассоциации создаются верные: быстрое, краткое событие. Здесь более-менее понятно.
А как же быть с синтаксисом? Там часто творится нечто, что разобрать с наскока непросто. Общие правила таковы:
1. Символом x обозначайте «жертву» определённой операции, например:
numbers = [1, 2, 3, 4, 5]even_numbers = list(filter(lambda x: x % 2 == 0, numbers)) # Выбираем только четные числаprint(even_numbers) # Вывод: [2, 4]2. Кропотливо разбирайте, что делает каждая встроенная функция или оператор. Давайте разберём насыщенный пример:
list(map(trace(lambda x: x*2), range(3)))- range() создаст перечисление от нуля до трех;
- trace() опишет подробно, что вызвана лямбда-функция с числами от range();
- map() применит умножение на 2 к каждому элементу;
– list() превратит результат в список.
На выходе мы получим:
[TRACE] Calling <lambda> with args (0,) and kwargs [TRACE] Calling <lambda> with args (1,) and kwargs {} [TRACE] Calling <lambda> with args (2,) and kwargs {} [0, 2, 4]Таким образом, на практике у вас появится «лямбда-насмотренность», то есть способность раскладывать сложное действие на простые операции и как бы нанизывать их друг на друга.
#лучшиепрактики