En nybörjarguide för att förstå Python Lambda -funktioner

En nybörjarguide för att förstå Python Lambda -funktioner

Lambdas i Python är en av de mest användbara, viktiga och intressanta funktionerna att veta om. Tyvärr är de också lätta att missförstå och ta fel.





I den här artikeln kommer vi att förklara allt du behöver veta om dessa mystiska funktioner, hur du använder dem och varför de är användbara.





Innan du dyker in i dessa praktiska exempel kanske du vill skapa en virtuell Python -miljö. Om du inte ens vill göra det, bör du åtminstone prova dessa exempel med ett interaktivt online Python -skal .





Vad är en Lambda i Python?

En lambda är helt enkelt ett sätt att definiera en funktion i Python. De är ibland kända som 'lambda -operatörer' eller 'lambda -funktioner'.

Om du har använt Python tidigare har du förmodligen definierat dina funktioner med def nyckelord, och det har fungerat bra för dig hittills. Så varför finns det ett annat sätt att göra samma sak?



Skillnaden är att lambda -funktioner är anonyma. Det betyder att de är funktioner som inte behöver namnges. De används för att skapa små, engångsfunktioner i fall där en 'riktig' funktion skulle vara för stor och skrymmande.

Lambdas returnerar ett funktionsobjekt som kan tilldelas en variabel. Lambdas kan ha valfritt antal argument, men de kan bara ha ett uttryck. Du kan inte anropa andra funktioner i lambdas.





Den vanligaste användningen för lambda-funktioner är i kod som kräver en enkel enradig funktion, där det skulle vara överkill att skriva en fullständig normal funktion. Detta täcks mer detaljerat nedan, under 'Vad om karta, filter och minska?'.

Hur man använder Lambdas i Python

Innan vi tittar på en lambda -funktion, låt oss titta på en super grundläggande funktion som definierade det 'traditionella' sättet:





def add_five(number):
return number + 5

print(add_five(number=4))

Denna funktion är mycket grundläggande, men den tjänar till att illustrera lambdas. Din kan vara mer komplex än så här. Denna funktion lägger till fem till alla nummer som skickas till den via siffra parameter.

Så här ser det ut som en lambda -funktion:

add_five = lambda number: number + 5

print(add_five(number=4))

Snarare än att använda def , ordet lambda är använd. Inga parenteser krävs, men alla ord efter lambda nyckelord skapas som parametrar. Tjocktarmen används för att separera parametrarna och uttrycket. I det här fallet är uttrycket nummer + 5 .

Det finns ingen anledning att använda lämna tillbaka nyckelord --- lambda gör detta åt dig automatiskt.

Så här skapar du en lambda -funktion med två argument:

hur får jag min iPhone att ladda snabbare
add_numbers_and_five = lambda number1, number2: number1 + number2 + 5

print(add_numbers_and_five(number1=4, number2=3))

Om du fortfarande är osäker när det gäller lambdas, kommer nästa avsnitt att dyka in och hjälpa dig att se ljuset.

Python Lambdas med karta, filter och reducera

Python -kärnbiblioteket har tre metoder som kallas Karta , minska , och filtrera . Dessa metoder är möjligen de bästa skälen att använda lambda -funktioner.

De Karta funktion förväntar sig två argument: en funktion och en lista. Den tar den funktionen och tillämpar den på alla element i listan och returnerar listan över modifierade element som ett kartobjekt. De lista funktionen används för att konvertera det resulterande kartobjektet till en lista igen.

Så här använder du karta utan en lambda:

list1 = [2, 4, 6, 8]
print(list1)
def add_five(number):
return number + 5

new_list = list(map(add_five, list1))
print(new_list)

Denna kartfunktion är ganska praktisk, men den kan vara bättre. de add_five funktion skickas in som ett argument, men vad händer om du inte vill skapa en funktion varje gång du använder karta? Du kan använda en lambda istället!

Så här ser samma kod ut, bara med funktionen ersatt av en lambda:

strömma videor från dator till tv
list1 = [2, 4, 6, 8]
print(list1)

new_list = list(map(lambda x: x + 5, list1))
print(new_list)

Som du kan se, helheten add_five funktion behövs inte längre. Istället används lambda -funktionen för att hålla saker snygga.

Med filtrera funktion, är processen ungefär densamma. Filtrera tar en funktion och tillämpar den på alla elemen i en lista och skapade en ny lista med endast de element som fick funktionen att returnera True.

Först, utan lambdas:

numbers = [1, 4, 5, 10, 20, 30]
print(numbers)
def greater_than_ten_func(number):
if number > 10:
return True
else:
return False
new_numbers = list(filter(greater_than_ten_func, numbers))

print(new_numbers)

Det är inget fel med den här koden, men den börjar bli lite lång. Låt oss se hur många rader en lambda kan ta bort:

numbers = [1, 4, 5, 10, 20, 30]
print(numbers)
new_numbers = list(filter(lambda x: x > 10, numbers))
print(new_numbers)

Lambda -funktionen har ersatt behovet av helheten större_ än_ten_func ! Och det har gjort det i fem enkla ord. Det är därför lambdas är kraftfulla: de minskar röran för enkla uppgifter.

Slutligen, låt oss titta på minska . Reducera är en annan cool Python -funktion. Det tillämpar en rullande beräkning på alla objekt i en lista. Du kan använda detta för att räkna upp en summa eller multiplicera alla nummer tillsammans:

from functools import reduce
numbers = [10, 20, 30, 40]
print(numbers)
def summer(a, b):
return a + b

result = reduce(summer, numbers)
print(result)

Det här exemplet måste importeras minska från funktioner modul, men oroa dig inte, functools -modulen är en del av Python -kärnbiblioteket.

Berättelsen är ungefär densamma med en lambda, det behövs ingen funktion:

from functools import reduce
numbers = [10, 20, 30, 40]
print(numbers)

result = reduce(lambda a, b: a + b, numbers)
print(result)

Saker att se upp med med Python Lambdas

Dessa exempel har visat hur enkla lambda -funktioner är, tillsammans med karta, filtrera och reducera, från Python -kärnbiblioteket. Ändå finns det några användningsområden där lambda -funktioner inte hjälper.

Om du gör något mer än en grundläggande uppgift eller vill ringa andra metoder, använd en normal funktion. Lambdas är bra för enstaka, anonyma funktioner, men de måste bara ha ett enda uttryck. Om din lambda börjar se ut som ett vanligt uttryck är det förmodligen dags att återskapa en dedikerad metod.

För fler tips, kolla vår guide till objektorienterad programmering i Python och kolla in vår FAQ -guide för Python -nybörjare.

Dela med sig Dela med sig Tweet E-post 3 sätt att kontrollera om ett e -postmeddelande är riktigt eller falskt

Om du har fått ett e -postmeddelande som ser lite tveksamt ut är det alltid bäst att kontrollera dess äkthet. Här är tre sätt att se om ett e -postmeddelande är sant.

Läs Nästa
Relaterade ämnen
  • Programmering
  • Pytonorm
  • Handledning för kodning
Om författaren Joe Coburn(136 artiklar publicerade)

Joe är utbildad i datavetenskap från University of Lincoln, Storbritannien. Han är en professionell mjukvaruutvecklare, och när han inte flyger drönare eller skriver musik kan han ofta hittas ta foton eller producera videor.

Mer från Joe Coburn

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e -böcker och exklusiva erbjudanden!

Klicka här för att prenumerera