Sådan bruger du Lambda-funktioner i Python [With Examples]

I denne tutorial lærer du alt om lambda-funktioner i Python – fra syntaksen til at definere lambda-funktioner til de forskellige use cases med kodeeksempler.

I Python er lambdas anonyme funktioner, der har en kortfattet syntaks og kan bruges sammen med andre nyttige indbyggede funktioner. I slutningen af ​​denne øvelse har du lært, hvordan du definerer lambda-funktioner, og hvornår du bør overveje at bruge dem over almindelige Python-funktioner.

Lad os begynde!

Python Lambda Funktion: Syntaks og eksempler

Her er den generelle syntaks til at definere en lambda-funktion i Python:

lambda parameter(s):return value

I ovenstående generelle syntaks:

  • lambda er det nøgleord, du skal bruge til at definere en lambda-funktion, efterfulgt af en eller flere parametre, som funktionen skal tage.
  • Der er et kolon, der adskiller parametrene og returværdien.

💡 Når du definerer en lambda-funktion, bør du sikre dig, at returværdien beregnes ved at evaluere et udtryk, der spænder over en enkelt kodelinje. Du vil forstå dette bedre, når vi koder eksempler.

Eksempler på Python Lambda-funktioner

Den bedste måde at forstå lambda-funktioner på er at starte med at omskrive almindelige Python-funktioner som lambda-funktioner.

👩🏽‍💻 Du kan kode med i en Python REPL eller i toadmin.dk’ online Python-editor.

#1. Overvej følgende funktion square(), der tager et tal, num, som argument og returnerer kvadratet af tallet.

def square(num):
    return num*num

Du kan kalde funktionen med argumenter og kontrollere, at den fungerer korrekt.

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

Du kan tildele dette lambda-udtryk til et variabelnavn, f.eks. kvadrat1 for at gøre funktionsdefinitionen mere kortfattet: kvadrat1 = lambdatal: tal*tal og derefter kalde kvadrat1-funktionen med et hvilket som helst tal som argument. Vi ved dog, at lambdaer er anonyme funktioner, så du bør undgå at tildele dem til en variabel.

For funktionen square() er parameteren num, og returværdien er num*num. Efter vi har identificeret disse, kan vi tilslutte dem i lambda-udtrykket og kalde det med et argument, som vist:

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

Dette er konceptet for Immediately Invoked Function Expression, hvor vi kalder en funktion lige efter at have defineret den.

#2. Lad os derefter omskrive en anden simpel funktion add(), der tager tal, num1 og num2, og returnerer deres sum, num1 + num2.

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

Lad os kalde funktionen add() med to tal som argumenter:

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

I dette tilfælde er num1 og num2 de to parametre, og returværdien er num1 + num2.

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

Python-funktioner kan også tage standardværdier for parametre. Lad os ændre definitionen af ​​add()-funktionen og indstille standardværdien for num2-parameteren til 10.

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

I følgende funktionskald:

  • I det første funktionskald er værdien af ​​num1 1 og værdien af ​​num2 er 3. Når du indtaster værdien for num2 i funktionskaldet, bruges denne værdi; funktionen returnerer 4.
  • Men hvis du kun indtaster ét argument (num1 er 7), bruges standardværdien 10 for num2; funktionen returnerer 17.
>>> add(1,3)
4
>>> add(7)
17

Når du skriver funktioner, der indtager standardværdier for visse parametre som lambda-udtryk, kan du angive standardværdien, når du definerer parametrene.

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

Hvornår skal du bruge Lambda-funktioner i Python?

Nu hvor du har lært det grundlæggende om lambda-funktioner i Python, er her et par brugssager:

  • Når du har en funktion, hvis returudtryk er en enkelt kodelinje, og du ikke behøver at referere til funktionen andre steder i det samme modul, kan du bruge lambda-funktioner. Vi har også kodet et par eksempler for at forstå dette.
  • Du kan bruge lambda-funktioner, når du bruger indbyggede funktioner, såsom map(), filter() og reduce().
  • Lambda-funktioner kan være nyttige til at sortere Python-datastrukturer såsom lister og ordbøger.
  9 bedste ekspertnetværk, der skal bruges til at træffe informerede forretningsbeslutninger

Sådan bruges Python Lambda med indbyggede funktioner

1. Brug af Lambda med map()

Map()-funktionen tager en iterabel og en funktion ind og anvender funktionen på hvert element i iterablen, som vist:

Lad os oprette en nums-liste og bruge map()-funktionen til at oprette en ny liste, der indeholder kvadratet af hvert tal i nums-listen. Bemærk brugen af ​​lambda-funktionen til at definere kvadreringsoperationen.

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

Da funktionen map() returnerer et kortobjekt, bør vi kaste det ind i en liste.

▶️ Tjek denne tutorial på map()-funktionen i Python.

2. Brug af Lambda med filter()

Lad os definere tal, en liste over tal:

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

Antag, at du gerne vil filtrere denne liste og kun beholde de ulige tal.

Du kan bruge Pythons indbyggede filter() funktion.

Filter()-funktionen tager en betingelse og en iterable ind: filter(condition, iterable). Resultatet indeholder kun de elementer i den originale iterable, der opfylder betingelsen. Du kan caste det returnerede objekt ind i en Python iterable såsom liste.

  Sådan sender du en placeringsopdatering til en Skype-gruppesamtale

For at filtrere alle de lige tal fra, beholder vi kun de ulige tal. Så lambda-udtrykket skal være lambda num: num%2!=0. Mængden num%2 er resten, når num divideres med 2.

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

3. Brug af Lambda med reduce()

Funktionen reduce() tager en iterabel og en funktion ind. Det reducerer det iterable ved at anvende funktionen iterativt på elementerne i det iterable.

For at bruge reduce()-funktionen skal du importere den fra Pythons indbyggede functools-modul:

>>> from functools import reduce

Lad os bruge reduce()-funktionen til at beregne summen af ​​alle tal i nums-listen. Vi definerer et lambda-udtryk: lambda num1,tal2:tal1+num2, som den reducerende sumfunktion.

Reduktionsoperationen vil ske således: f(f(f(4,5),6),9) = f(f(9,6),9) = f(15,9) = 24. Her er f summeringsoperationen på to punkter på listen, defineret af lambdafunktionen.

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

Python Lambda-funktioner til at tilpasse sortering

Udover at bruge lambda-funktioner med indbyggede Python-funktioner, såsom map(), filter() og reduce(), kan du også bruge dem til at tilpasse indbyggede funktioner og metoder, der bruges til sortering.

1. Sortering af Python-lister

Når du arbejder med Python-lister, bliver du ofte nødt til at sortere dem ud fra bestemte sorteringskriterier. For at sortere Python-lister på plads kan du bruge den indbyggede sort()-metode på dem. Hvis du har brug for en sorteret kopi af listen, kan du bruge sorted()-funktionen.

Syntaksen til at bruge Pythons sorted() funktion er sorteret (iterable, key=…, reverse= True | False).

– Nøgleparameteren bruges til at tilpasse sorteringen.
– Den omvendte parameter kan indstilles til True eller False; standardværdien er False.

Ved sortering af lister med tal og strenge er standardsortering i henholdsvis stigende rækkefølge og alfabetisk rækkefølge. Du kan dog nogle gange ønsker at definere et brugerdefineret kriterium for sortering.

Overvej følgende listefrugter. Antag, at du gerne vil have en sorteret kopi af listen. Du bør sortere strengene efter antallet af forekomster af ‘p’ i dem – i faldende rækkefølge.

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

Det er tid til at bruge den valgfrie nøgleparameter. En streng er en iterabel i Python, og for at opnå antallet af forekomster af et tegn i den, kan du bruge den indbyggede .count() metode. Så vi sætter nøglen til lambda x:x.count(‘p’), så sorteringen er baseret på antallet af gange ‘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 eksempel:

  • Nøglen til at sortere efter er antallet af forekomster af tegnet ‘p’, og det er defineret som et lambda-udtryk.
  • Da vi har sat den omvendte parameter til Sand, sker sorteringen i faldende rækkefølge af antallet af forekomster af ‘p’.
  Sådan annulleres Microsoft Office fra enhver enhed

I frugtlisten indeholder ‘ananas’ 3 forekomster af ‘p’, og strengene ‘æble’, ‘druer’ og ‘mango’ indeholder henholdsvis 2, 1 og 0 forekomster af ‘p’.

Forståelse af stabil sortering

Overvej et andet eksempel. For det samme sorteringskriterium har vi omdefineret frugtlisten. Her optræder ‘p’ i strengene ‘æble’ og ‘druer’ henholdsvis to gange og en gang. Og det forekommer aldrig 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 outputlisten kommer ‘mango’ før ‘melon’, selvom de begge ikke har tegnet ‘p’. Men hvorfor er dette tilfældet? Sorted()-funktionen udfører en stabil sortering; så når antallet af ‘p’ er lig for to strenge, bevares rækkefølgen af ​​elementer i den originale frugtliste.

Som en hurtig øvelse kan du bytte positionerne for ‘mango’ og ‘melon’ i frugtlisten, sortere listen ud fra det samme kriterium og observere outputtet.

▶️ Lær mere om sortering af Python-lister.

2. Sortering af en Python-ordbog

Du kan også bruge lambdas, når du sorterer Python-ordbøger. Overvej følgende ordbog price_dict, der indeholder varer og deres priser.

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

For at få nøgleværdi-parrene i en ordbog som en liste over tuples, kan du bruge den indbyggede ordbogsmetode .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, strenge og mere nul-indeksering. Så det første punkt er ved indeks 0, det andet punkt er ved indeks 1, og så videre.

Vi vil gerne sortere efter værdien, som er prisen på hver vare i ordbogen. I hver tuple i listen price_dict_items er varen ved indeks 1 prisen. Så vi sætter nøglen til lambda x:x[1] da det vil bruge elementet ved indeks 1, prisen, til at sortere ordbogen.

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

I outputtet er ordbogsartiklerne sorteret i stigende rækkefølge af priser: startende med ‘Slik’, prissat til 3 enheder til ‘Honey’, prissat til 15 enheder.

▶️ For at lære mere, tjek denne detaljerede guide til at sortere en Python-ordbog efter nøgle og værdi.

Opsummering

Og der har du det! Du har lært, hvordan du definerer lambda-funktioner og bruger dem effektivt med andre indbyggede Python-funktioner. Her er en oversigt over de vigtigste takeaways:

  • I Python er lambdas anonyme funktioner, der kan tage flere argumenter ind og returnere en værdi; udtrykket, der skal evalueres for at generere denne returværdi, skal være en kodelinje. De kan bruges til at gøre små funktionsdefinitioner mere kortfattede.
  • For at definere Lambda-funktionen kan du bruge syntaksen: lambda parameter(s): returværdi.
  • Nogle af de vigtige use cases inkluderer at bruge dem med map(), filter() og reduce() funktioner og som nøgleparameter til at tilpasse sortering af Python iterables.

Lær derefter, hvordan du udfører etagedeling i Python.