Как использовать лямбда-функции в Python [с примерами]
Опубликовано: 2022-11-10В этом руководстве вы узнаете все о лямбда-функциях в Python — от синтаксиса для определения лямбда-функций до различных вариантов использования с примерами кода.
В Python лямбда-выражения — это анонимные функции с кратким синтаксисом, которые можно использовать с другими полезными встроенными функциями. К концу этого руководства вы узнаете, как определять лямбда-функции и когда вам следует рассмотреть возможность их использования вместо обычных функций Python.
Давайте начнем!
Лямбда-функция Python: синтаксис и примеры
Вот общий синтаксис для определения лямбда-функции в Python:
lambda parameter(s):return value
В приведенном выше общем синтаксисе:
- lambda — это ключевое слово, которое следует использовать для определения лямбда-функции, за которым следует один или несколько параметров , которые должна принимать функция.
- Там есть двоеточие, разделяющее параметры и возвращаемое значение .
При определении лямбда-функции вы должны убедиться, что возвращаемое значение вычисляется путем вычисления выражения, занимающего одну строку кода. Вы поймете это лучше, когда мы будем кодировать примеры.
Примеры лямбда-функций Python
Лучший способ понять лямбда-функции — начать с переписывания обычных функций Python в виде лямбда-функций.
Вы можете кодировать в Python REPL или в онлайн-редакторе Python Geekflare.
# 1 . Рассмотрим следующую функцию square()
, которая принимает число num
в качестве аргумента и возвращает квадрат числа.
def square(num): return num*num
Вы можете вызвать функцию с аргументами и убедиться, что она работает правильно.
>>> square(9) 81 >>> square(12) 144
Вы можете присвоить это лямбда-выражение имени переменной, скажем, square1
, чтобы сделать определение функции более кратким: square1 = lambda num: num*num
, а затем вызвать функцию square1
с любым числом в качестве аргумента. Однако мы знаем, что лямбда-выражения — это анонимные функции, поэтому вам следует избегать их присваивания переменной.
Для функции square()
параметр равен num
, а возвращаемое значение равно num*num
. После того, как мы определили их, мы можем подключить их к лямбда-выражению и вызвать его с аргументом, как показано ниже:
>>> (lambda num: num*num)(2) 4
Это концепция немедленно вызываемого функционального выражения, когда мы вызываем функцию сразу после ее определения.
# 2 . Далее давайте перепишем еще одну простую функцию add()
, которая принимает числа num1
и num2
и возвращает их сумму num1 + num2
.
def add(num1,num2): return num1 + num2
Вызовем функцию add()
с двумя числами в качестве аргументов:
>>> add(4,3) 7 >>> add(12,5) 17 >>> add(12,6) 18
В этом случае num1
и num2
являются двумя параметрами, а возвращаемое значение равно num1 + num2
.
>>> (lambda num1, num2: num1 + num2)(3,7) 10
Функции Python также могут принимать значения по умолчанию для параметров. Давайте изменим определение функции add()
и установим значение параметра num2
по умолчанию равным 10.
def add(num1, num2=10): return num1 + num2
В следующих вызовах функций:
- В первом вызове функции значение
num1
равно 1, а значениеnum2
равно 3. Когда вы передаете значениеnum2
в вызове функции, используется это значение; функция возвращает 4.
- Однако, если вы передаете только один аргумент (
num1
равно 7), дляnum2
используется значение по умолчанию 10; функция возвращает 17.
>>> add(1,3) 4 >>> add(7) 17
При написании функций, которые принимают значения по умолчанию для определенных параметров в виде лямбда-выражений, вы можете указать значение по умолчанию при определении параметров.
>>> (lambda num1, num2 = 10: num1 + num2)(1) 11
Когда следует использовать лямбда-функции в Python?
Теперь, когда вы изучили основы лямбда-функций в Python, вот несколько вариантов их использования:
- Если у вас есть функция, возвращаемое выражение которой представляет собой одну строку кода, и вам не нужно ссылаться на эту функцию где-либо еще в том же модуле, вы можете использовать лямбда-функции. Мы также закодировали несколько примеров, чтобы понять это.
- Вы можете использовать лямбда-функции при использовании встроенных функций, таких как map(), filter() и reduce().
- Лямбда-функции могут быть полезны при сортировке структур данных Python, таких как списки и словари.
Как использовать Python Lambda со встроенными функциями
1. Использование Lambda с map()
Функция map()
принимает итерируемый объект и функцию и применяет функцию к каждому элементу в итерируемом объекте, как показано ниже:

Давайте создадим nums
список и воспользуемся функцией map()
для создания нового списка, содержащего квадрат каждого числа в nums
списке. Обратите внимание на использование лямбда-функции для определения операции возведения в квадрат.
>>> nums = [4,5,6,9] >>> list(map(lambda num:num*num,nums)) [16, 25, 36, 81]
Поскольку функция map()
возвращает объект карты, мы должны преобразовать его в список.
️ Ознакомьтесь с этим руководством по функции map() в Python.
2. Использование Lambda с filter()
Давайте определим nums
, список чисел:
>>> nums = [4,5,6,9]
Предположим, вы хотите отфильтровать этот список и оставить только нечетные числа.
Вы можете использовать встроенную в Python функцию filter()
.
Функция filter()
принимает условие и итерируемый объект : filter(condition, iterable)
. Результат содержит только те элементы исходной итерации, которые удовлетворяют условию. Вы можете преобразовать возвращенный объект в итерируемый объект Python, такой как список.

Чтобы отфильтровать все четные числа, мы сохраним только нечетные числа. Таким образом, лямбда-выражение должно иметь lambda num: num%2!=0
. Количество num%2
— это остаток от num
на 2.
-
num%2!=0
имеет значениеTrue
, еслиnum
нечетное, и -
num%2!=0
имеетFalse
, еслиnum
четное.
>>> nums = [4,5,6,9] >>> list(filter(lambda num:num%2!=0,nums)) [5, 9]
3. Использование Lambda с функцией reduce()
Функция reduce()
принимает итерируемый объект и функцию. Он уменьшает итерацию, многократно применяя функцию к элементам итерации.


Чтобы использовать функцию reduce()
, вам придется импортировать ее из встроенного в Python модуля functools
:
>>> from functools import reduce
Давайте воспользуемся функцией reduce()
для вычисления суммы всех чисел в списке nums
. Мы определяем лямбда-выражение: lambda num1,num2:num1+num2
как функцию уменьшающей суммы.
Операция редукции будет происходить следующим образом: f(f(f(4,5),6),9) = f(f(9,6),9) = f(15,9) = 24. Здесь f равно операция суммирования двух элементов списка, определяемая лямбда-функцией.
>>> from functools import reduce >>> nums = [4,5,6,9] >>> reduce(lambda num1,num2:num1+num2,nums) 24
Лямбда-функции Python для настройки сортировки
В дополнение к использованию лямбда-функций со встроенными функциями Python, такими как map()
, filter()
и reduce()
, вы также можете использовать их для настройки встроенных функций и методов, используемых для сортировки.

1. Сортировка списков Python
При работе со списками Python вам часто придется сортировать их на основе определенных критериев сортировки. Чтобы отсортировать списки Python на месте, вы можете использовать для них встроенный метод sort()
. Если вам нужна отсортированная копия списка, вы можете использовать функцию sorted()
.
Синтаксис для использования функции sorted
sorted()
в Python:sorted(iterable, key=...,reverse= True | False)
.
–key
параметр используется для настройки сортировки.
– Параметрreverse
может быть установлен наTrue
илиFalse
; значение по умолчанию —False
.
При сортировке списков чисел и строк сортировка по умолчанию выполняется в порядке возрастания и в алфавитном порядке соответственно. Однако иногда вам может понадобиться определить какой-либо пользовательский критерий для сортировки.
Рассмотрим следующий список fruits
. Предположим, вы хотите получить отсортированную копию списка. Вы должны отсортировать строки по количеству вхождений в них «p» — в порядке убывания.
>>> fruits = ['apple','pineapple','grapes','mango']
Пришло время использовать необязательный key
параметр. Строка является итерируемой в Python, и чтобы получить количество вхождений символа в ней, вы можете использовать встроенный метод .count()
. Поэтому мы устанавливаем key
на lambda x:x.count('p')
, чтобы сортировка основывалась на том, сколько раз 'p' встречается в строке.
>>> fruits = ['apple','pineapple','grapes','mango'] >>> sorted(fruits,key=lambda x:x.count('p'),reverse=True) ['pineapple', 'apple', 'grapes', 'mango']
В этом примере:
-
key
для сортировки является количество вхождений символа «p», и он определяется как лямбда-выражение. - Поскольку мы установили для параметра
reverse
значениеTrue
, сортировка происходит в порядке убывания количества вхождений 'p'.
В списке fruits
«ананас» содержит 3 вхождения «р», а строки «яблоко», «виноград» и «манго» содержат 2, 1 и 0 вхождений «р» соответственно.
Понимание стабильной сортировки
Рассмотрим другой пример. Для того же критерия сортировки мы переопределили список fruits
. Здесь «p» встречается в строках «яблоко» и «виноград» дважды и один раз соответственно. И это никогда не встречается в строках «манго» и «дыня».
>>> fruits = ['mango','apple','melon','grapes'] >>> sorted(fruits,key=lambda x:x.count('p'),reverse=True) ['apple', 'grapes', 'mango', 'melon']
В выходном списке «манго» стоит перед «дыней», хотя они оба не имеют символа «р». Но почему это так? Функция sorted()
выполняет стабильную сортировку; поэтому, когда количество «p» равно для двух строк, порядок элементов в исходном списке fruits
сохраняется.
В качестве быстрого упражнения поменяйте местами «манго» и «дыня» в списке
fruits
, отсортируйте список по тому же критерию и посмотрите на результат.
️ Узнайте больше о сортировке списков Python.
2. Сортировка словаря Python
Вы также можете использовать лямбда-выражения при сортировке словарей Python. Рассмотрим следующий словарь price_dict
, который содержит товары и их цены.
>>> price_dict = { ... 'Milk':10, ... 'Honey':15, ... 'Bread':7, ... 'Candy':3 ... }
Чтобы получить пары ключ-значение словаря в виде списка кортежей, вы можете использовать встроенный метод словаря .items()
:
>>> price_dict_items = price_dict.items() dict_items([('Milk', 10), ('Honey', 15), ('Bread', 7), ('Candy', 3)])
В Python все итерируемые объекты: списки, кортежи, строки и т. д. следуют нулевой индексации. Таким образом, первый элемент имеет индекс 0, второй элемент — индекс 1 и так далее.
Мы хотели бы отсортировать по значению, которое является ценой каждого элемента в словаре. В каждом кортеже в списке price_dict_items
элемент с индексом 1 является ценой. Поэтому мы устанавливаем key
на lambda x:x[1]
, так как он будет использовать элемент с индексом 1, цену, для сортировки словаря.
>>> dict(sorted(price_dict_items,key=lambda x:x[1])) {'Candy': 3, 'Bread': 7, 'Milk': 10, 'Honey': 15}
В выходных данных элементы словаря были отсортированы в порядке возрастания цен: начиная с «Конфеты» по цене 3 единицы до «Мёд» по цене 15 единиц.
️ Чтобы узнать больше, ознакомьтесь с этим подробным руководством по сортировке словаря Python по ключу и значению.
Подводя итоги
И вот оно! Вы узнали, как определять лямбда-функции и эффективно использовать их с другими встроенными функциями Python. Вот краткое изложение основных выводов:
- В Python лямбды — это анонимные функции , которые могут принимать несколько аргументов и возвращать значение; выражение, которое должно быть оценено для генерации этого возвращаемого значения, должно состоять из одной строки кода. Их можно использовать, чтобы сделать определения небольших функций более краткими.
- Чтобы определить лямбда-функцию, вы можете использовать синтаксис: лямбда-параметры: возвращаемое значение .
- Некоторые из важных вариантов использования включают их использование с функциями
map()
,filter()
иreduce()
, а также в качестве ключевого параметра для настройки сортировки итерируемых объектов Python.
Затем узнайте, как выполнить деление этажей в Python.