Slik bruker du Lambda-funksjoner i Python [With Examples]

I denne opplæringen vil du lære alt om lambda-funksjoner i Python – fra syntaksen for å definere lambda-funksjoner til de forskjellige brukstilfellene med kodeeksempler.

I Python er lambdaer anonyme funksjoner som har en kortfattet syntaks og kan brukes med andre nyttige innebygde funksjoner. Mot slutten av denne opplæringen har du lært hvordan du definerer lambda-funksjoner og når du bør vurdere å bruke dem over vanlige Python-funksjoner.

La oss begynne!

Python Lambda-funksjon: Syntaks og eksempler

Her er den generelle syntaksen for å definere en lambda-funksjon i Python:

lambda parameter(s):return value

I den generelle syntaksen ovenfor:

  • lambda er nøkkelordet du skal bruke for å definere en lambda-funksjon, etterfulgt av en eller flere parametere som funksjonen skal ta.
  • Det er et kolon som skiller parametrene og returverdien.

💡 Når du definerer en lambda-funksjon, bør du sørge for at returverdien beregnes ved å evaluere et uttrykk som spenner over en enkelt kodelinje. Du vil forstå dette bedre når vi koder eksempler.

Python Lambda-funksjonseksempler

Den beste måten å forstå lambda-funksjoner på er å starte med å omskrive vanlige Python-funksjoner som lambda-funksjoner.

👩🏽‍💻 Du kan kode med i en Python REPL eller i tipsbilk.net sin online Python-editor.

#1. Tenk på følgende funksjon kvadrat(), som tar inn et tall, num, som argument og returnerer kvadratet av tallet.

def square(num):
    return num*num

Du kan kalle opp funksjonen med argumenter og kontrollere at den fungerer som den skal.

>>> square(9)
81
>>> square(12)
144

Du kan tilordne dette lambda-uttrykket til et variabelnavn, for eksempel kvadrat1 for å gjøre funksjonsdefinisjonen mer kortfattet: kvadrat1 = lambdanummer: tall*nummer og deretter kalle kvadrat1-funksjonen med et hvilket som helst tall som argument. Vi vet imidlertid at lambdaer er anonyme funksjoner, så du bør unngå å tilordne dem til en variabel.

For funksjonen square() er parameteren num og returverdien er num*num. Etter at vi har identifisert disse, kan vi koble dem inn i lambda-uttrykket og kalle det med et argument, som vist:

>>> (lambda num: num*num)(2)
4

Dette er konseptet med Immediately Invoked Function Expression, hvor vi kaller en funksjon rett etter å ha definert den.

#2. Deretter, la oss omskrive en annen enkel funksjon add() som tar inn tall, num1 og num2, og returnerer summen deres, num1 + num2.

def add(num1,num2):
    return num1 + num2

La oss kalle add()-funksjonen med to tall som argumenter:

>>> add(4,3)
7
>>> add(12,5)
17
>>> add(12,6)
18

I dette tilfellet er num1 og num2 de to parameterne og returverdien er num1 + num2.

>>> (lambda num1, num2: num1 + num2)(3,7)
10

Python-funksjoner kan også ta standardverdier for parametere. La oss endre definisjonen av add()-funksjonen og sette standardverdien til num2-parameteren til 10.

def add(num1, num2=10):
    return num1 + num2

I følgende funksjonsanrop:

  • I det første funksjonskallet er verdien av num1 1 og verdien av num2 er 3. Når du sender inn verdien for num2 i funksjonskallet, brukes den verdien; funksjonen returnerer 4.
  • Men hvis du bare sender inn ett argument (tall1 er 7), brukes standardverdien 10 for num2; funksjonen returnerer 17.
>>> add(1,3)
4
>>> add(7)
17

Når du skriver funksjoner som tar inn standardverdier for visse parametere som lambda-uttrykk, kan du spesifisere standardverdien når du definerer parameterne.

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

Når bør du bruke Lambda-funksjoner i Python?

Nå som du har lært det grunnleggende om lambda-funksjoner i Python, her er noen brukstilfeller:

  • Når du har en funksjon hvis returuttrykk er en enkelt kodelinje og du ikke trenger å referere til funksjonen andre steder i samme modul, kan du bruke lambda-funksjoner. Vi har også kodet noen få eksempler for å forstå dette.
  • Du kan bruke lambda-funksjoner når du bruker innebygde funksjoner, som map(), filter() og reduce().
  • Lambda-funksjoner kan være nyttige for å sortere Python-datastrukturer som lister og ordbøker.
  Hvordan få en engangs-e-postadresse

Slik bruker du Python Lambda med innebygde funksjoner

1. Bruke Lambda med map()

Map()-funksjonen tar inn en iterabel og en funksjon og bruker funksjonen på hvert element i iterablen, som vist:

La oss lage en nums-liste og bruke map()-funksjonen til å lage en ny liste som inneholder kvadratet til hvert tall i nums-listen. Legg merke til bruken av lambda-funksjonen for å definere kvadreringsoperasjonen.

>>> nums = [4,5,6,9]
>>> list(map(lambda num:num*num,nums))
[16, 25, 36, 81]

Ettersom map()-funksjonen returnerer et kartobjekt, bør vi kaste det inn i en liste.

▶️ Sjekk ut denne opplæringen på map()-funksjonen i Python.

2. Bruke Lambda med filter()

La oss definere tall, en liste over tall:

>>> nums = [4,5,6,9]

Anta at du vil filtrere denne listen og bare beholde oddetallene.

Du kan bruke Pythons innebygde filter()-funksjon.

Filter()-funksjonen tar inn en tilstand og en iterabel: filter(condition, iterable). Resultatet inneholder bare elementene i den originale iterable som tilfredsstiller betingelsen. Du kan kaste det returnerte objektet inn i en Python iterable, for eksempel liste.

  Kart over metall viser sjangere gjennom tiårene med spillelister

For å filtrere ut alle partallene, beholder vi bare oddetallene. Så lambda-uttrykket bør være lambda num: num%2!=0. Mengden num%2 er resten når num er delt på 2.

  • num%2!=0 er Sant når num er oddetall, og
  • num%2!=0 er falsk når num er partall.
>>> nums = [4,5,6,9]
>>> list(filter(lambda num:num%2!=0,nums))
[5, 9]

3. Bruke Lambda med reduce()

Reduser()-funksjonen tar inn en iterabel og en funksjon. Den reduserer den iterable ved å bruke funksjonen iterativt på elementene i den iterable.

For å bruke reduce()-funksjonen, må du importere den fra Pythons innebygde functools-modul:

>>> from functools import reduce

La oss bruke redusere()-funksjonen til å beregne summen av alle tallene i talllisten. Vi definerer et lambda-uttrykk: lambda num1,tall2:tall1+tall2, som den reduserende sumfunksjonen.

Reduksjonsoperasjonen vil skje slik: f(f(f(4,5),6),9) = f(f(9,6),9) = f(15,9) = 24. Her er f summeringsoperasjonen på to elementer på listen, definert av lambda-funksjonen.

>>> from functools import reduce
>>> nums = [4,5,6,9]
>>> reduce(lambda num1,num2:num1+num2,nums)
24

Python Lambda-funksjoner for å tilpasse sortering

I tillegg til å bruke lambda-funksjoner med innebygde Python-funksjoner, som map(), filter() og reduce(), kan du også bruke dem til å tilpasse innebygde funksjoner og metoder som brukes for sortering.

1. Sortering av Python-lister

Når du arbeider med Python-lister, må du ofte sortere dem basert på bestemte sorteringskriterier. For å sortere Python-lister på plass, kan du bruke den innebygde sort()-metoden på dem. Hvis du trenger en sortert kopi av listen, kan du bruke sorted()-funksjonen.

Syntaksen for å bruke Pythons sorted()-funksjon er sortert (iterable, key=…,reverse= True | False).

– Nøkkelparameteren brukes til å tilpasse sorteringen.
– Omvendt parameter kan settes til True eller False; standardverdien er False.

Ved sortering av lister med tall og strenger er standardsortering i henholdsvis stigende rekkefølge og alfabetisk rekkefølge. Noen ganger kan det imidlertid være lurt å definere et tilpasset kriterium for sortering.

Tenk på følgende listefrukter. Anta at du ønsker å få en sortert kopi av listen. Du bør sortere strengene i henhold til antall forekomster av «p» i dem – i synkende rekkefølge.

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

Det er på tide å bruke den valgfrie nøkkelparameteren. En streng er en iterabel i Python, og for å få antall forekomster av et tegn i den, kan du bruke den innebygde .count()-metoden. Så vi setter nøkkelen til lambda x:x.count(«p») slik at sorteringen er basert på antall ganger «p» forekommer i strengen.

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

I dette eksemplet:

  • Nøkkelen å sortere på er antall forekomster av tegnet «p», og det er definert som et lambda-uttrykk.
  • Ettersom vi har satt den omvendte parameteren til True, skjer sorteringen i avtagende rekkefølge av antall forekomster av «p».
  Hvordan lage en bok i Minecraft

I fruktlisten inneholder «ananas» 3 forekomster av «p», og strengene «eple», «druer» og «mango» inneholder henholdsvis 2, 1 og 0 forekomster av «p».

Forstå stabil sortering

Tenk på et annet eksempel. For det samme sorteringskriteriet har vi redefinert fruktlisten. Her forekommer «p» i strengene «eple» og «druer» henholdsvis to ganger og en gang. Og det forekommer aldri i strengene «mango» og «melon».

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

I utdatalisten kommer «mango» foran «melon» selv om de begge ikke har tegnet «p». Men hvorfor er det slik? Sorted()-funksjonen utfører en stabil sortering; så når antallet av «p» er lik for to strenger, beholdes rekkefølgen av elementene i den originale fruktlisten.

Som en rask øvelse, bytt posisjonene til «mango» og «melon» i fruktlisten, sorter listen basert på samme kriterium, og observer resultatet.

▶️ Lær mer om sortering av Python-lister.

2. Sortere en Python-ordbok

Du kan også bruke lambdas når du sorterer Python-ordbøker. Tenk på følgende ordbok price_dict som inneholder varer og deres priser.

>>> price_dict = {
... 'Milk':10,
... 'Honey':15,
... 'Bread':7,
... 'Candy':3
... }

For å få nøkkelverdi-parene til en ordbok som en liste over tupler, kan du bruke den innebygde ordbokmetoden .items():

>>> price_dict_items = price_dict.items()
dict_items([('Milk', 10), ('Honey', 15), ('Bread', 7), ('Candy', 3)])

I Python følger alle iterables: lister, tupler, strenger og mer nullindeksering. Så det første elementet er på indeks 0, det andre elementet er på indeks 1, og så videre.

Vi vil gjerne sortere etter verdien, som er prisen på hver vare i ordboken. I hver tuppel i listen price_dict_items er varen i indeks 1 prisen. Så vi satte nøkkelen til lambda x:x[1] siden den vil bruke elementet i indeks 1, prisen, for å sortere ordboken.

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

I utdataene er ordbokelementene sortert i stigende rekkefølge av priser: starter med «Candy», priset til 3 enheter til «Honey», priset til 15 enheter.

▶️ For å lære mer, sjekk ut denne detaljerte veiledningen for å sortere en Python-ordbok etter nøkkel og verdi.

Oppsummering

Og der har du det! Du har lært hvordan du definerer lambda-funksjoner og bruker dem effektivt med andre innebygde Python-funksjoner. Her er et sammendrag av de viktigste takeawayene:

  • I Python er lambdaer anonyme funksjoner som kan ta inn flere argumenter og returnere en verdi; uttrykket som skal evalueres for å generere denne returverdien bør være én linje med kode. De kan brukes til å gjøre små funksjonsdefinisjoner mer konsise.
  • For å definere Lambda-funksjonen kan du bruke syntaksen: lambda-parameter(er): returverdi.
  • Noen av de viktige brukstilfellene inkluderer bruk av dem med map(), filter() og reduce() funksjoner og som nøkkelparameter for å tilpasse sortering av Python iterables.

Deretter lærer du hvordan du utfører etasjedeling i Python.