Лямбда-функции и анонимные функции в Python
Как вы уже знаете, ключевое слово def используется для определения стандартных функций в Python. Но, кроме таких обычных функций, в Python существуют так называемые анонимные или лямбда-функции. Для их создания используется ключевое слово lambda. Обычно такая функция не предназначена для повторного применения.
lambda [аргументы] : выражениеЛямбда-функция может иметь ноль или более аргументов перед символом ‘:’. При вызове такой функции выполняется выражение, указанное после ‘:’.
Пример определения лямбда-функции:
get_cube = lambda x : x ** 3Приведенная выше лямбда-функция начинается с ключевого слова lambda, за которым следует параметр x. Выражение x ** 3 после ‘:’ возвращает вызывающему коду значение куба переданного числа. Сама лямбда-функция lambda x : x ** 3 присваивается переменной get_cube для ее последующего вызова как именованной функции. Имя переменной становится именем функции, чтобы мы могли работать с ней как с обычной функцией.
Пример вызова лямбда-функции:
>>> get_cube(4) 64Приведенное выше определение лямбда-функции аналогично следующей стандартной функции:
def get_cube(x): return x ** 3Выражение не обязательно должно всегда возвращать значение. Следующая лямбда-функция не возвращает ничего.
Пример лямбда-функции, не возвращающей значение:
>>> welcome = lambda user: print('Welcome, ' + name + '!') >>> welcome('Anon') Welcome, Anon!Лямбда-функция может иметь только одно выражение. Очевидно, что она не может заменить функцию, тело которой содержит условия, циклы и т.д.
Следующая лямбда-функция содержит несколько параметров.
Пример лямбда-функции с тремя параметрами:
>>> get_prod = lambda a, b, c : a * b * c >>> get_prod(3, 5, 7) 105Также лямбда-функция может принимать любое количество параметров.
Пример лямбда-функции с неопределенным числом аргументов (используются только первые 3):
Лямбда-функция без параметров
Ниже приведен пример лямбда-функции без параметров.
>>> welcome = lambda : print('Welcome!') >>> welcome() Welcome!Анонимная функция
Мы можем объявить лямбда-функцию и вызвать ее как анонимную функцию, не присваивая ее переменной.
Пример анонимной лямбда-функции:
>>> (lambda x: x**3)(10) 1000Здесь lambda x: x3 определяет анонимную функцию и вызывает ее один раз, передавая аргументы в скобках (lambda x: x3)(10).
В Python функции, как и литералы, можно передавать в качестве аргументов.
Лямбда-функции особенно полезны, когда мы хотим отправить функцию на вход другой функции. Мы можем передать анонимную лямбда-функцию, не присваивая ее переменной, в качестве аргумента другой функции.
Пример передачи лямбда-функции в качестве параметра:
def run_task(task): print('Before running the task') task() print('After running the task') run_task(lambda : print('Task is complete!')) # передача анонимной функции important_task = lambda : print('Important task is complete!') run_task(important_task) # передача лямбда-функцииBefore running the task Task is complete! After running the task Before running the task Important task is complete! After running the taskПредставленная выше функция run_task() определена с параметром task, который вызывается как функция внутри run_task(). run_task(lambda : print(‘Task is complete!’)) вызывает функцию run_task() с анонимной лямбда-функцией в качестве аргумента.
В Python есть встроенные функции, которые принимают в качестве аргументов другие функции. Функции map(), filter() и reduce() являются важными инструментами функционального программирования. Все они принимают на вход функцию. Такая функция-аргумент может быть обычной функцией или лямбда-функцией.
Пример передачи лямбда-функции в map():
>>> prime_cube_list = map(lambda x: x**3, [2, 3, 5, 7, 11]) # передача анонимной функции >>> next(prime_cube_list) 8 >>> next(prime_cube_list) 27 >>> next(prime_cube_list) 125 >>> next(prime_cube_list) 343 >>> next(prime_cube_list) 1331Анонимные функции в Python
Что нужно знать начинающему веб-разработчику о лямбда-выражениях и анонимных функциях? Скорее всего, если вы заинтересовались этой темой, вы уже знаете что значит и первое, и второе. Но для ясности мы дадим краткое определение терминам. Анонимные функции — это функции, которым не присваивается идентификатор и которые объявляются в месте использования. Они применимы во многих языках программирования. Однако их синтаксис от языка к языку заметно разнится. Лямбда-выражение — это элемент синтаксиса, который нужен для определения анонимной функции.
Освойте профессию
«Fullstack-разработчик на Python»
Fullstack-разработчик на PythonFullstack-разработчики могут в одиночку сделать IT-проект от архитектуры до интерфейса. Их навыки востребованы у работодателей, особенно в стартапах. Научитесь программировать на Python и JavaScript и создавайте сервисы с нуля.
Профессия / 12 месяцев
Fullstack-разработчик на Python
Создавайте веб-проекты самостоятельно
3 742 ₽/мес7 483 ₽/мес
Итак, мы проанализировали несколько статей на тему анонимных функций и лямбда-выражений и представим здесь их краткий адаптированный перевод или ссылки, чтобы вы сами могли выбрать те темы, которые вам интересны. За основу мы взяли статью пишущего программиста Ankit Patel, поехали! Анонимные функции состоят из аргументов, которые передаются функциям высшего порядка или используются для обработки результатов функции высшего порядка, которой необходимо вернуть функцию. Такие функции являются частью функционального программирования, где функция обладает теми же ролями, что и литералы для других типов данных. Анонимные функции используются тогда, когда функциональность, которая в них содержится, не нуждается в названии и может ограничиться использованием краткого термина. Чаще всего они применяются при замыкании и карринге.
Замыкание
Функции, которые могут вычисляться в среде, содержащей связанные переменные.
Карринг*
*Название в честь Карри Хаскела, разработчика комбинаторной логики, в которой сведение к функциям одного аргумента носит основополагающий характер, источник — Wikipedia. Для получения определенного результата функция, которая претерпевает процесс изменения, в результате которого она принимает меньшее количество входных данных, называется каррируемой.
Ключевое слово лямбда
Чтобы определить анонимную функцию в Python, мы используем ключевое слово лямбда, чтобы создать функцию, которая может вычислить значение выражения и автоматически вернуть скалярную величину. Синтаксис: lamdba arg1,arg2, …argN:
В коде выше после передачи позиционных аргументов в функцию, мы подробно передаем другой аргумент для лямбда-аргумента, чтобы его вычислить. Использование лямбда-выражений в качестве ключевых
Использование лямбда-выражений с функциями высшего порядка в Python
1. Map ()
Используя функцию map, мы можем перебрать весь список и выполнить действия с отдельным его элементом, передавая необходимые данные. Синтаксис: map (function,inputs) Здесь мы используем лямбда-выражение как аргумент функции map, что после этого детально конвертируется в список.
2. Filter ()
Сходным образом мы можем использовать функцию filter, которая выводит данные на основе определенного условия.
3. Reduce ()
Более подробно почитать об этих функциях можно в статье Full Stack- разработчика, Rupesh Mishra. Он рассказывает как их использовать, описывая базовый синтаксис и снабжая все это примерами.
В каких случаях нужно использовать лямбда-выражения?
- Когда вам нужно вычислить результат с помощью какого-либо выражения.
- Когда вы не хотите совершать ненужные вызовы функций.
Не злоупотребляйте лямбда-функциями, используя их без надобности. Если вы хотите определить функцию, которая выполняет конкретную задачу и является важной, то она заслуживает имени. К тому же, так вы сделаете код более читаемым. Анонимные функции зачастую сложно интерпретировать, и у них сложный синтаксис.
Они не поддерживают строку документации, и поэтому задокументировать их функциональность крайне сложно.
Добавим, что, безусловно, работа веб-разработчика предполагает использование лямбда-выражений, но только по-настоящему хорошие веб-разработчики умеют не использовать эти инструменты там, где это не нужно. Об этом читайте в статье Monty Python. Он подробно описывает преимущества и недостатки лямбда-выражений и приводит примеры их неудачного использования.
Ну а в начале мы писали, что разные языки по-разному используют анонимные функции. Так вот в статье Андрея Мискова об их применении в JS вы найдете подробное описание спорных моментов их использования, а также конкретные примеры для сравнения с другими языками, в том числе, Python.
Удачного вам погружения в мир разработки и Python!
Анонимные функции — Python: Функции
Представим, что нам нужно написать функцию для выполнения определенного действия, но создание отдельной функции кажется излишним. Чтобы решить эту проблему, можно использовать анонимные функции. Они позволяют определить функцию «на лету» внутри другой функции или выражения.
В этом уроке мы изучим, что такое анонимные функции, как их определять и использовать в Python. Также рассмотрим примеры, где использование анонимных функций может значительно упростить написание кода. Но для начала вспомним, что такое именованные функции.
Принцип работы именованных функций
Именованные функции в Python — это функции, которым назначено имя с помощью оператора def . Он позволяет создавать функции, которые можно вызывать по имени из любой точки программы.
Пример именованной функции:
def add_numbers(x, y): return x + yЗдесь именованная функция — add_numbers . Она принимает два аргумента x и y и возвращает их сумму.
Еще бывают ситуации, когда нужна функция, чтобы ее передать, например, в функцию высшего порядка. Но больше эта функция нигде не понадобится.
Придумывание имен в программировании — одна из основных проблем. Но если функция нужна здесь и сейчас, и больше нигде ее вызывать не придется, то и имя ей не нужно. Такие одноразовые функции называются анонимными или лямбда-функциями.
Принцип работы анонимных функций
Анонимные функции — это функции, у которых нет имени. Они определяются с помощью ключевого слова lambda . Это ключевое слово названо в честь лямбда-абстракции — основы Лямбда Исчисления. Это математический аппарат, который часто применяется в разработке языков программирования. В Лямбда Исчислении все функции — анонимные. Поэтому анонимные функции во многих языках тоже иногда называют лямбдами или лямбда-функциями.
Такие функции обычно используются в качестве аргументов функций высшего порядка, таких как map() , filter() и reduce() . Также они позволяют описывать практически все языки, которые умеют работать с функциями как со значениями.
В Python определение подобной функции выглядит так:
lambda x: x + 1 # at 0x7f56e5798a60>Мы сконструировали функцию, но имя она не получила, поэтому REPL ее отобразил как function .
Рассмотрим пример, который использует анонимную функцию:
l = [1, 2, 5, 3, 4] l.sort(key=lambda x: -x) l # [5, 4, 3, 2, 1]Метод sort принимает в качестве аргумента key ссылку на функцию. В примере в качестве аргумента указана функция, которая меняет знак у аргумента. По этой причине список получается отсортирован от большего к меньшему.
Сортировка с указанием ключа встречается довольно часто, а вот ключи сортировки чаще всего будут разными. Поэтому выносить ключи в именованные функции смысла нет и анонимные функции здесь подходят.
Рассмотрим другой пример, который использует анонимную функцию вместе с функцией map() :
l = [1, 2, 3, 4, 5] result = list(map(lambda x: x * 2, l)) result # [2, 4, 6, 8, 10]В данном примере функция map() принимает анонимную функцию и список данных. Анонимная функция lambda x: x * 2 принимает один аргумент x и умножает его на два. Функция map() применяет эту анонимную функцию к каждому элементу списка l и возвращает новый список, в котором каждый элемент удвоен. Результат сохраняется в переменной result и выводится на экран.
Теперь рассмотрим пример работы с функцией filter :
l = [1, 2, 3, 4, 5] result = list(filter(lambda x: x % 2 == 0, l)) result # [2, 4]Этот код использует функцию filter . Она фильтрует элементы входной последовательности, согласно условию, которое задано в лямбда-функции. В нашем примере функция фильтрует элементы списка l .
Здесь лямбда-функция lambda x: x % 2 == 0 определяет, что элемент должен быть четным — его остаток при делении на два должен быть равен нулю.
Функция filter применяет лямбда-функцию к каждому элементу списка l и оставляет только те элементы, для которых лямбда-функция возвращает True . Затем эти элементы используются для создания нового списка с помощью функции list .
Посмотрим на еще один пример применения анонимной функции, но уже с функцией reduce :
from functools import reduce l = [1, 2, 3, 4, 5] result = reduce(lambda x, y: x * y, l) result # 120В данном примере используется лямбда-функция, которая принимает два аргумента: x и y . В итоге она возвращает их произведение. Итерируемый объект l содержит числа [1, 2, 3, 4, 5] . Поэтому функция reduce последовательно умножает каждую пару чисел в списке: (1 * 2) * 3) * 4) * 5 . Это приводит к результату 120 .
Особенности анонимных функций
Рассмотрим главные особенности анонимных функций:
- Аргументы анонимных функций не заключены в скобки. К этому нужно будет привыкнуть. Остальные средства для описания аргументов доступны в полной мере — и именованные аргументы, и *args с **kwargs
- Тело лямбда-функции — это всегда одно выражение, результат вычисления которого и будет возвращаемым значением. В теле лямбда-функции не получится выполнить несколько действий и не получится использовать многострочные конструкции вроде for и while . Но зато анонимные функции обычно просто читать, чего было бы сложно добиться, разреши авторам "многострочные" лямбды
- Объявление функции является выражением. Функции можно конструировать и тут же вызывать, не заканчивая выражение:
1 + (lambda x: x * 5)(8) + 1 # 42
В таком виде лямбды встречаются редко. Зато часто можно встретить возврат лямбды из функции:
def caller(arg): return lambda f: f(arg) call_with_five = caller(5) call_with_five(str) # '5' call_with_five(lambda x: x + 1) # 6
Из этого примера можно понять, что лямбды являются замыканиями — возвращаемая лямбда запоминает значение переменной arg .
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Как создать и использовать лямбда-функции в Python
Изучите создание и использование лямбда-функций в Python для выполнения простых задач с помощью анонимных функций и функций высшего порядка.

Алексей Кодов
Автор статьи
23 июня 2023 в 18:40
Лямбда-функции являются одним из полезных инструментов в Python, которые позволяют создавать анонимные функции для выполнения небольших задач. В этой статье мы рассмотрим, как создавать и использовать лямбда-функции в Python.
Что такое лямбда-функции
Лямбда-функции – это анонимные функции, которые могут включать только одно выражение. Они обычно используются для выполнения простых операций, не требующих полного определения функции с помощью ключевого слова def . Лямбда-функции могут принимать любое количество аргументов, но могут возвращать только одно значение.
Создание лямбда-функций
Создание лямбда-функций в Python осуществляется с помощью ключевого слова lambda . Синтаксис для создания лямбда-функций выглядит следующим образом:
lambda arguments: expression
Пример создания лямбда-функции, которая принимает два аргумента и возвращает их сумму:
sum = lambda x, y: x + y
Python-разработчик: новая работа через 9 месяцев
Получится, даже если у вас нет опыта в IT

Использование лямбда-функций
Лямбда-функции могут быть использованы везде, где используются обычные функции. Они особенно полезны при использовании с функциями высшего порядка, такими как map() , filter() и reduce() .
Пример использования лямбда-функции с функцией map()
Функция map() применяет указанную функцию ко всем элементам итерируемого объекта (например, списка) и возвращает итератор с результатами. В следующем примере мы используем лямбда-функцию для возведения каждого элемента списка в квадрат:
numbers = [1, 2, 3, 4, 5] squared_numbers = map(lambda x: x**2, numbers) print(list(squared_numbers)) # Output: [1, 4, 9, 16, 25]
Пример использования лямбда-функции с функцией filter()
Функция filter() фильтрует элементы итерируемого объекта на основе указанной функции и возвращает только те элементы, для которых функция возвращает True . В следующем примере мы используем лямбда-функцию для фильтрации четных чисел из списка:
numbers = [1, 2, 3, 4, 5] even_numbers = filter(lambda x: x % 2 == 0, numbers) print(list(even_numbers)) # Output: [2, 4]
Заключение
Лямбда-функции предоставляют удобный способ создания анонимных функций для выполнения простых задач в Python. Они особенно полезны при работе с функциями высшего порядка и могут значительно упростить ваш код. Надеемся, что информация в этой статье поможет вам успешно использовать лямбда-функции в своих проектах на Python.
Не забудьте практиковаться и изучать дополнительные материалы для углубления своих знаний в Python-разработке.










