Перейти до основного вмісту
Модуль 5 · Урок 4 із 420/36 у курсі~10 min
Модульні уроки (4/4)

Лямбда-функції та функції вищого порядку

лямбда — це анонімна функція, визначена в одному рядку. Синтаксис:

Python
lambda parametri: espressione

Еквівалент def, але більш стислий і добре підходить для "викидання" функції для переходу до інших функцій.

Python
quadrato = lambda x: x ** 2
quadrato(5)    # 25

# equivalent to:
def quadrato(x):
    return x ** 2

Відмінності проти def

Аспектdeflambda
названеобхіднийанонімний
тілокілька заявОДИН вираз
поверненняявнийнеявний (вираз)
рядок документаціїтакні

Ні return всередині лямбда: значення виразу Є результатом.

Коли використовувати лямбда

Майже завжди: як аргумент key для функцій сортування або вибору.

Python
parole = ["banana", "kiwi", "mela", "fragola"]
sorted(parole, key=len)
# ['kiwi', 'mela', 'banana', 'fragola']

key=len повідомляє sorted: «щоб порівняти два елементи, використовуйте їх довжину». для спеціальні критерії, використовуйте лямбда:

Python
utenti = [
    {"nome": "Ada", "eta": 36},
    {"nome": "Linus", "eta": 54},
    {"nome": "Grace", "eta": 85},
]
per_eta = sorted(utenti, key=lambda u: u["eta"])
# sorted by ascending age

Інші типові використання: min(...), max(...), filter(...), map(...).

Python
nums = [-3, 1, -4, 1, -5, 9]
max(nums, key=lambda n: abs(n))   # -5 (maximum by absolute value)

Функції вищого порядку

Функція є вищого порядку, якщо вона приймає функцію як аргумент або повертає один. sorted, max, filter, map мають вищий порядок. Лямбда існує саме для того, щоб полегшити виклики вищого порядку.

Коли слід уникати лямбда-функцій

Лямбда-функції корисні для коротких одноразових операцій (наприклад, швидкого сортування). Однак, якщо ви виявите, що призначаєте лямбда-вираз до змінної (наприклад, double = lambda x: x * 2), зазвичай краще використовувати стандартний блок def для зручності читання та налагодження (оскільки функції, визначені за допомогою def, зберігають свої справжні назви під час відстеження помилок).

Спробуйте

вправи#python.m5.l4.e1
Спроби: 0Завантаження…

Дано список `words = ['banana', 'kiwi', 'mela', 'fragola']`, відсортуйте його за зростанням довжини в `by_length`. Оцініть `за_довжиною`.

Завантаження редактора…
Показати підказку

key=len (або лямбда p: len(p)).

Рішення доступне після 3 спроб

Повторна вправа

вправи#python.m5.l4.e2
Спроби: 0Завантаження…

Маючи список кортежів `points = [(1, 5), (3, 2), (2, 4)]`, відсортуйте їх за ДРУГИМ елементом у порядку зростання та призначте `by_y`. Оцініть `by_y`.

Завантаження редактора…
Показати підказку

лямбда p: p[1]

Рішення доступне після 3 спроб

Додатковий виклик

вправи#python.m5.l4.e3
Спроби: 0Завантаження…

Define an anonymous `lambda` function that takes a number `x` and returns `True` if the number is even, and `False` otherwise. Assign the lambda to the variable `is_even` and test it with `is_even(8)` as the last line.

Завантаження редактора…
Показати підказку

Напишіть is_even = лямбда x: x % 2 == 0, а потім викличте is_even(8).

Рішення доступне після 3 спроб