Direct naar de hoofdinhoud
Module 5 · Les 4 van 420/36 in de cursus~10 min
Modulelessen (4/4)

Lambda en hogere orde functies

Een lambda is een anonieme functie, gedefinieerd op één regel. Syntaxis:

Python
lambda parametri: espressione

Gelijk aan def, maar beknopter en geschikt voor 'wegwerp' functies doorgeven aan andere functies.

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

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

Verschillen versus def

Aspectdeflambda
naamvereistanoniem
lichaammeerdere uitsprakeneen ENKELE expressie
terugexplicietimpliciet (de uitdrukking)
docstringjanee

Geen return binnen een lambda: de waarde van de expressie IS het resultaat.

Wanneer lambda gebruiken?

Bijna altijd: als key argument voor sorteer- of selectiefuncties.

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

key=len vertelt sorted: "om twee elementen te vergelijken, gebruik hun lengte". Voor aangepaste criteria, gebruik lambda:

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

Andere typische toepassingen: min(...), max(...), filter(...), map(...).

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

Functies van hogere orde

Een functie is van hogere orde als deze een functie als argument of accepteert geeft er één terug. sorted, max, filter, map zijn van een hogere orde. Lambda bestaat juist om oproepen van hogere orde gemakkelijker te maken.

Wanneer moet u lambda-functies vermijden?

Lambda-functies zijn handig voor korte, wegwerpoperaties (zoals snel sorteren). Als u echter merkt dat u een lambda aan een variabele toewijst (bijvoorbeeld double = lambda x: x * 2), verdient het over het algemeen de voorkeur om een ​​standaard def blok te gebruiken voor leesbaarheid en foutopsporingsdoeleinden (aangezien functies die zijn gedefinieerd met def hun echte naam behouden bij het traceren van fouten).

Probeer het

Oefening#python.m5.l4.e1
Pogingen: 0Laden…

Gegeven de lijst `words = ['banaan', 'kiwi', 'mela', 'fragola']`, sorteer deze op oplopende lengte in `op_lengte`. Evalueer `op_lengte`.

Editor laden…
Toon hint

sleutel=len (of lambda p: len(p)).

Oplossing beschikbaar na 3 pogingen

Oefening beoordelen

Oefening#python.m5.l4.e2
Pogingen: 0Laden…

Gegeven de lijst met tupels `points = [(1, 5), (3, 2), (2, 4)]`, sorteer ze op het SECOND-element in oplopende volgorde en wijs ze toe aan `by_y`. Evalueer `by_y`.

Editor laden…
Toon hint

lambda p: p[1]

Oplossing beschikbaar na 3 pogingen

Extra uitdaging

Oefening#python.m5.l4.e3
Pogingen: 0Laden…

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.

Editor laden…
Toon hint

Schrijf is_even = lambda x: x % 2 == 0 en roep dan is_even(8) aan.

Oplossing beschikbaar na 3 pogingen