ЛЕКЦИЯ 6
.pdf6. Анонимные функции - lambda.
lambda argument1, argument2,... argumentN : выражение, использующее аргументы
В качестве результата lambda-выражения возвращают точно такие же объекты функций, которые создаются инструкциями def, но:
●lambda – это выражение, а не инструкция. По этой причине ключевое слово lambda может
появляться там, где синтаксис языка Python не позволяет использовать инструкцию def, – внутри литералов или в вызовах функций, например. Кроме того, lambda-выражение возвращает значение (новую функцию), которое при желании можно присвоить переменной, в противовес инструкции def, которая всегда связывает функцию с именем в заголовке, а не возвращает ее в виде результата.
●Тело lambda – это не блок инструкций, а единственное выражение. Тело lambda-выражения сродни тому, что помещают в инструкцию return внутри определения def, – вы просто вводите результат в виде выражения вместо его явного возврата. Вследствие этого ограничения lambdaвыражения менее универсальны, чем инструкция def – в теле lambda-выражения может быть
реализована только логика, не использующая такие инструкции, как if. Такая реализация предусмотрена заранее – она ограничивает возможность создания большого числа уровней вложенности программ: lambdaвыражения предназначены для создания простых функций, а инструкции def – для решения более сложных задач.
def func(x, y, z): return x + y + z func(2, 3, 4)
f = lambda x, y, z: x + y + z f(2, 3, 4)
9 |
9 |
6.1. Использование lambda - выражений.
lambda-выражения наиболее полезны в качестве сокращенного варианта инструкции def, когда необходимо вставить маленькие фрагменты исполняемого программного кода туда, где использование инструкций недопустимо.
L = [lambda x: x**2, |
# Встроенные определения функции |
lambda x: x**3, |
# Список из трех функции ̆ |
lambda x: x**4] |
|
for f in L: |
|
print(f(2)) |
# Выведет 4, 8, 16 |
print(L[0](3)) |
# Выведет 9 |
С помощью инструкции def: def f1(x): return x ** 2
def f2(x): return x ** 3 # Определения именованных функции def f3(x): return x ** 4
̆ L = [f1, f2, f3] # Ссылка по имени
for f in L: print(f(2)) # Выведет 4, 8, 16 print(L[0](3)) # Выведет 9