Як використовувати лямбда-функції в Python [With Examples]

У цьому підручнику ви дізнаєтеся все про лямбда-функції в Python – від синтаксису для визначення лямбда-функцій до різних випадків використання з прикладами коду.

У Python лямбда-вирази — це анонімні функції, які мають стислий синтаксис і можуть використовуватися з іншими корисними вбудованими функціями. Наприкінці цього підручника ви дізнаєтеся, як визначати лямбда-функції та коли варто розглядати їх використання замість звичайних функцій Python.

Давайте почнемо!

Лямбда-функція Python: синтаксис і приклади

Ось загальний синтаксис для визначення лямбда-функції в Python:

lambda parameter(s):return value

У наведеному вище загальному синтаксисі:

  • лямбда — це ключове слово, яке слід використовувати для визначення лямбда-функції, а потім один або більше параметрів, які має приймати функція.
  • Є двокрапка, що розділяє параметри та значення, що повертається.

💡 Визначаючи лямбда-функцію, ви повинні переконатися, що значення, що повертається, обчислюється шляхом обчислення виразу, який охоплює один рядок коду. Ви зрозумієте це краще, коли ми наведемо приклади коду.

Приклади лямбда-функції Python

Найкращий спосіб зрозуміти лямбда-функції — почати з перепису звичайних функцій Python як лямбда-функцій.

👩🏽‍💻 Ви можете кодувати разом у Python REPL або в онлайн-редакторі Python techukraine.net.

#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), значення за замовчуванням 10 використовується для num2; функція повертає 17.
>>> add(1,3)
4
>>> add(7)
17

Під час написання функцій, які приймають значення за замовчуванням для певних параметрів як лямбда-вирази, ви можете вказати значення за замовчуванням під час визначення параметрів.

>>> (lambda num1, num2 = 10: num1 + num2)(1)
11

Коли слід використовувати лямбда-функції в Python?

Тепер, коли ви вивчили основи лямбда-функцій у Python, ось кілька випадків використання:

  • Якщо у вас є функція, чий вираз повернення є одним рядком коду, і вам не потрібно посилатися на функцію в іншому місці того самого модуля, ви можете використовувати лямбда-функції. Ми також закодували кілька прикладів, щоб зрозуміти це.
  • Ви можете використовувати лямбда-функції під час використання вбудованих функцій, таких як map(), filter() і reduce().
  • Лямбда-функції можуть бути корисними для сортування структур даних Python, таких як списки та словники.
  Як зробити вертикальні відривні сторінки в Microsoft Word

Як використовувати Python Lambda із вбудованими функціями

1. Використання Lambda з map()

Функція map() приймає iterable та функцію та застосовує функцію до кожного елемента iterable, як показано:

Давайте створимо список 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]

Припустімо, ви хочете відфільтрувати цей список і зберегти лише непарні числа.

Ви можете використовувати вбудовану функцію filter() Python.

Функція filter() приймає умову та iterable: filter(condition, iterable). Результат містить лише ті елементи вихідної ітерації, які задовольняють умову. Ви можете перетворити повернутий об’єкт у ітерований Python, наприклад список.

Щоб відфільтрувати всі парні числа, ми збережемо лише непарні числа. Отже, лямбда-вираз має бути лямбда-число: число%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() приймає ітерований елемент і функцію. Він зменшує iterable шляхом повторного застосування функції до елементів iterable.

  7 програм для відновлення пошкоджених фотографій

Щоб використовувати функцію reduce(), вам доведеться імпортувати її з вбудованого модуля functools Python:

>>> from functools import reduce

Давайте використаємо функцію reduce(), щоб обчислити суму всіх чисел у списку nums. Ми визначаємо лямбда-вираз: лямбда 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() Python: sorted(iterable, key=…,reverse= True | False).

– Ключовий параметр використовується для налаштування сортування.
– Зворотний параметр може бути встановлений на True або False; значенням за замовчуванням є False.

Під час сортування списків чисел і рядків сортування за замовчуванням відбувається за зростанням і алфавітом відповідно. Проте інколи ви можете захотіти визначити певний власний критерій для сортування.

Розглянемо наступний список фруктів. Припустімо, ви хочете отримати відсортовану копію списку. Ви повинні відсортувати рядки за кількістю входжень у них ‘p’ – у порядку зменшення.

>>> fruits = ['apple','pineapple','grapes','mango']

Настав час використати необов’язковий параметр ключа. Рядок є ітерованим у Python, і щоб отримати кількість входжень символу в ньому, ви можете використовувати вбудований метод .count(). Тому ми встановлюємо ключ лямбда x:x.count(‘p’), щоб сортування базувалося на кількості разів, коли ‘p’ зустрічається в рядку.

>>> fruits = ['apple','pineapple','grapes','mango']
>>> sorted(fruits,key=lambda x:x.count('p'),reverse=True)
['pineapple', 'apple', 'grapes', 'mango']

У цьому прикладі:

  • Ключем для сортування є кількість входжень символу «p», і це визначається як лямбда-вираз.
  • Оскільки для параметра reverse встановлено значення True, сортування відбувається в порядку зменшення кількості входжень «p».

У списку фруктів «ананас» містить 3 входження «p», а рядки «яблуко», «виноград» і «манго» містять 2, 1 і 0 входжень «p» відповідно.

  Як змінити орієнтацію сторінки для однієї сторінки в MS Word

Розуміння стабільного сортування

Розглянемо інший приклад. Для того самого критерію сортування ми перевизначили список фруктів. Тут ‘p’ зустрічається в рядках ‘apple’ і ‘grapes’ двічі і один раз відповідно. І це ніколи не зустрічається в рядках ‘mango’ і ‘melon’.

>>> fruits = ['mango','apple','melon','grapes']
>>> sorted(fruits,key=lambda x:x.count('p'),reverse=True)
['apple', 'grapes', 'mango', 'melon']

У списку виведених даних «манго» стоїть перед «динею», хоча вони обидва не мають символу «р». Але чому це так? Функція sorted() виконує стабільне сортування; тому, коли кількість ‘p’ для двох рядків дорівнює, порядок елементів у вихідному списку фруктів зберігається.

Як швидку вправу поміняйте місцями «манго» та «диню» у списку фруктів, відсортуйте список за тим самим критерієм і спостерігайте за результатом.

▶️ Дізнайтеся більше про сортування списків 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 є ціною. Отже, ми встановили ключ лямбда x:x[1] оскільки він використовуватиме елемент під індексом 1, ціну, для сортування словника.

>>> dict(sorted(price_dict_items,key=lambda x:x[1]))
{'Candy': 3, 'Bread': 7, 'Milk': 10, 'Honey': 15}

У вихідних даних словникові позиції відсортовано в порядку зростання цін: починаючи з «Candy» за ціною 3 одиниці до «Honey» за ціною 15 одиниць.

▶️ Щоб дізнатися більше, перегляньте цей докладний посібник із сортування словника Python за ключем і значенням.

Підводячи підсумки

І ось воно! Ви навчилися визначати лямбда-функції та ефективно використовувати їх з іншими вбудованими функціями Python. Ось короткий виклад основних висновків:

  • У Python лямбда-вирази — це анонімні функції, які можуть приймати кілька аргументів і повертати значення; вираз, який буде обчислено для генерації цього поверненого значення, має бути одним рядком коду. Їх можна використовувати, щоб зробити визначення невеликих функцій більш лаконічними.
  • Щоб визначити функцію лямбда, можна використати синтаксис: параметр(и) лямбда: значення, що повертається.
  • Деякі з важливих варіантів використання включають їх використання з функціями map(), filter() і reduce(), а також як ключовий параметр для налаштування сортування ітерацій Python.

Далі дізнайтеся, як виконати поділ поверхів у Python.