Du sorterer en liste med navn, men vil at sorteringen skal ignorere store og små bokstaver. Du kunne skrevet en vanlig funksjon med def, gitt den et navn, og sendt den inn i sorted(). Men funksjonen er bare én linje lang, og du bruker den aldri igjen. Lambda i Python lar deg skrive den funksjonen rett der du trenger den, uten å gi den et navn.
Slik skriver du en lambda-funksjon
En lambda-funksjon i Python har tre deler: nøkkelordet lambda, ett eller flere argumenter, og ett uttrykk etter kolon:
lambda x: x + 1
Denne tar inn x og returnerer x + 1. Du trenger ikke skrive return, det skjer automatisk. Uttrykket etter kolon er alt funksjonen gjør, og det er også alt den returnerer.
Vil du bruke den, kan du kalle den direkte med parenteser rundt:
print((lambda x: x + 1)(5)) # 6
Eller du kan lagre den i en variabel:
legg_til_en = lambda x: x + 1
print(legg_til_en(5)) # 6
Begge gir samme resultat. Den andre varianten tilsvarer å skrive def legg_til_en(x): return x + 1. Forskjellen er kun syntaks.
Lambda med flere argumenter
Du kan sende inn mer enn ett argument, separert med komma:
fullt_navn = lambda fornavn, etternavn: f"{fornavn.title()} {etternavn.title()}"
print(fullt_navn("magnus", "olsen")) # Magnus Olsen
Her tar lambdaen to strenger, gjør om forbokstavene til store, og setter dem sammen. Metoden .title() gjør at "magnus" blir "Magnus". Akkurat som i en vanlig funksjon kan du bruke alle Python-metoder i uttrykket.
Lambda i sorted() for egendefinert sortering
Den vanligste bruken av lambda er som nøkkelargument i sorted(). Tenk deg en liste med tupler der hvert element har navn og alder:
personer = [("Kari", 30), ("Ole", 25), ("Anna", 35)]
sortert = sorted(personer, key=lambda person: person[1])
print(sortert) # [('Ole', 25), ('Kari', 30), ('Anna', 35)]
Uten lambda sorterer sorted() etter det første elementet (navnet). Med key=lambda person: person[1] forteller du Python at den skal sortere etter det andre elementet (alderen). Dette er renere enn å definere en egen funksjon bare for å hente ut ett element.
Vil du sortere i synkende rekkefølge, legger du til reverse=True:
sortert_eldst = sorted(personer, key=lambda p: p[1], reverse=True)
Lambda brukes også med .sort() på lister. Forskjellen er at sorted() lager en ny liste, mens .sort() endrer den eksisterende. Lambdaen fungerer likt i begge tilfeller.
Lambda med map() og filter()
map() kjører en funksjon på hvert element i en liste:
tall = [1, 2, 3, 4, 5]
doblet = list(map(lambda x: x * 2, tall))
print(doblet) # [2, 4, 6, 8, 10]
filter() beholder bare elementene der funksjonen returnerer True:
partall = list(filter(lambda x: x % 2 == 0, tall))
print(partall) # [2, 4]
Begge funksjonene krever en funksjon som første argument. Lambda gjør det mulig å skrive den rett inn uten ekstra definisjoner. Merk at list() rundt er nødvendig fordi map() og filter() returnerer iteratorer, ikke lister.
Når du bør bruke def i stedet
Lambda har én begrensning: den kan bare inneholde ett uttrykk. Ingen if/else-blokker over flere linjer, ingen for-løkker, ingen variabeltilordninger. Trenger du noe av dette, bruk def.
En god tommelfingerregel: Hvis du må lagre lambdaen i en variabel for å gjenbruke den, har du sannsynligvis bedre av en vanlig funksjon. Lambdaer er best som engangsbruk inne i funksjoner som sorted(), map() og filter().
Koden nedenfor er et vanlig anti-mønster:
# Unngå dette:
multipliser = lambda a, b: a * b
# Gjør dette i stedet:
def multipliser(a, b):
return a * b
def-versjonen er like kort, lettere å lese, og gir bedre feilmeldinger. Lambda gir alltid navnet "<lambda>" i feilmeldinger, som gjør debugging vanskeligere.
Lambda med betingelser
Du kan bruke et ternært uttrykk inne i en lambda for enkle if/else-valg:
status = lambda alder: "Voksen" if alder >= 18 else "Mindreårig"
print(status(20)) # Voksen
print(status(15)) # Mindreårig
Men dette er grensen for hva som er lesbart. Trenger du nøstede betingelser, er en vanlig funksjon riktig verktøy.
Lambda i en dictionary for enkel logikk
Et nyttig mønster er å bruke en dictionary med lambda-funksjoner som verdier:
operasjoner = {
"legg_til": lambda a, b: a + b,
"trekk_fra": lambda a, b: a - b,
"multipliser": lambda a, b: a * b,
}
resultat = operasjoner["legg_til"](5, 3) # 8
Du velger funksjon basert på en nøkkel i stedet for å skrive en lang if/elif-kjede. Hvert lambda-uttrykk er kort nok til å være lesbart, og du kan enkelt legge til nye operasjoner uten å endre eksisterende kode.
Neste steg
Nå som du kan bruke lambda i Python, er neste steg å forstå parametere og returverdier i vanlige funksjoner, der du har full fleksibilitet. Vil du håndtere uventede feil inne i funksjonene dine, viser try og except deg hvordan. Du finner også en komplett oversikt over innebygde funksjoner som map() og filter() i Python-dokumentasjonen.
Denne videoen er hentet fra kurset Python for nybegynnere på Utdannet.no. I det fulle kurset lærer du også listeforståelser, dekoratorer og mer avansert funksjonsbruk.




