Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛЕКЦИЯ 6

.pdf
Скачиваний:
14
Добавлен:
26.03.2016
Размер:
1.66 Mб
Скачать

6. Анонимные функции - 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