Теория урока

61. Анонимные функции: выражения lambda

В предыдущем уроке мы разобрались с аргументами и параметрами функций, а также с операторами * и **. Вот и дошли мы до этой темы. Если вы помните, в уроке «Внутреннее устройство и сортировка словаря в Python» я уже упоминал про lambda. Теперь настало время разобраться с этим понятием подробнее.

Кроме оператора def, в языке Python есть еще одна форма выражения, создающая объекты функций. Как и def, лямбда-выражение создает функцию, которая будет вызвана позже. Выражение lambda, в отличие от def не имеет имени, поэтому иногда такие функции называют анонимными.

На практике анонимные функции применяются, когда необходимо встроить определение функции в строку или отложить выполнение части кода. Далее синтаксис lambda-выражения:

Пример
lambda арг1, арг2, … аргN : выражение

Пока не совсем понятно, поэтому далее приведу конкретные примеры. Но для начала разберемся, чем lambda отличается от оператора def. Лямбда – выражение, а не оператор. Таким образом, лямбда-выражение может находится в таких местах, где это недопустимо синтаксисом для оператора def, например, в аргументах вызова функций (про аргументы и параметры мы подробно разбирались в предыдущем уроке).

Вторым отличием lambda от def, является ограниченность первого. Лямбда – одиночное выражение, а не блок операторов. Конечно, можно реализовать ветвление при помощи тернарного оператора и циклы при помощи списковых включений, но такая реализация существенно запутает код и сведет на «нет» все преимущества лямбда-выражения. Если вам нужны ветвления, циклы и более сложная логика, то используйте оператор def.

Рассмотрим знакомый вам пример использования оператора def:

Пример
def sum(a, b):
return a + b

print(sum(3, 2)) # => 5

А теперь запишем аналогичный пример, но при помощи лямбда-выражения:

Пример
f = lambda a, b : a + b
print(f(3, 2)) # => 5

Скоро мы дойдем до встроенных функций filter(), map(), reduce() и вам станет окончательно понятно, для чего необходимо знать лямбда-выражения. Выражение lambda безусловно полезно для краткого обозначения функции, но не стоит им злоупотреблять и применять там, где требуется вся мощь оператора def.

Область видимости выражения lambda

Вспомним урок «Область видимости в Python» и правило LEGB. Лямбда относится к букве E – вложенная область.

В этом уроке мы разобрались с тем, что такое лямбда-выражение и чем оно отличается от оператора def. Все это нас подводит к инструментам функционального программирования (вышеупомянутые функции filter(), map(), reduce() и есть парадигмы функционального программирования в Python).

ПРОЧИТАНО
Следующий урок

Похожие уроки и записи блога

Основы функций в PythonЗнакомство с Python
Написание модулей в PythonЗнакомство с Python
Первое знакомство с PythonЗнакомство с Python
Обработка исключений (try/except) в PythonЗнакомство с Python
Типы данных в PythonЗнакомство с Python
Генераторы и оператор yield в PythonЗнакомство с Python
Модули в PythonЗнакомство с Python
Функциональное программирование: map, filter и reduceЗнакомство с Python
Еще о возможностях модулей в Python Знакомство с Python
<
×
>
Впервые на сайте Codebra?

Извините за это всплывающее окно, меня они тоже раздражают.

Образовательный ресурс codebra.ru полностью посвящен программированию. Все курсы и уроки находятся на главной странице. Ради интереса можете посмотреть на содержимое курсов по Python, HTML и CSS, JavaScript, C++ и другие, размещенные на главной странице.

Если что-то не нашли, то воспользуйтесь поиском по сайту, который находится на главной странице в самом верху.

Удачи в обучении!

Закрыть окно