Lambda-funksjoner i Python

Hva er Lambda-funksjoner?

â € <
I Python er funksjoner objekter: de kan tilordnes variabler, kan returneres fra andre funksjoner, lagres i lister eller dicts og sendes som parametere for andre funksjoner. Tenk for eksempel på map() innebygd funksjon. Syntaksen er map(function, iterable) og den brukes til praktisk bruk function til hvert element av iterable.

map() returnerer faktisk en iterator gjenstand. I praksis støpte vi resultatet som et list, tuple, set, dictosv., avhengig av hva som passer best.
â € <
Anta at du vil kvadrere hvert ledd i en liste ved å bruke map() funksjon. For å gjøre det, vil vi definere en square() funksjon og bruk den som parameter for map():

my_list = [1,2,3,4,5]
def square(x):
    return x**2

my_modified_list = list(map(square, my_list))
print(my_modified_list)
[1, 4, 9, 16, 25]

â € <
Men hvis den eneste bruken av vår square() funksjonen er å lage denne listen, det er renere å bruke en lambda funksjon:

my_list = [1,2,3,4,5]
my_modified_list = list(map(lambda x: x**2, my_list))
print(my_modified_list)
[1, 4, 9, 16, 25]

I Python, lambda funksjoner er anonyme funksjoner som henter navn og syntaks fra Alonzo Church Lambda-kalkulus. Syntaksen deres er:

lambda x_1,..., x_n : expression(x_1, ..., x_n)

Dette skaper en anonym funksjon som mottar variablene som input x_1, ..., x_n og returnerer det evaluerte expression(x_1, ..., x_n).
â € <
Hensikten med lambda funksjoner skal brukes som parameter for funksjoner som aksepterer funksjoner som parameter, slik vi gjorde med map() ovenfor. Python lar deg tilordne en lambda funksjon til en variabel, men PEP 8 stilguide fraråder det. Hvis du vil tilordne en enkel funksjon til en variabel, er det bedre å gjøre det som en enlinjedefinisjon. Dette sikrer at det resulterende objektet er riktig navngitt, og forbedrer sporingslesbarheten:

anonymous_square = lambda x : x**2def named_square(x): return x**2print(anonymous_square.__name__)
print(named_square.__name__)


a = anonymous_square
b = named_square
print(a.__name__)
print(b.__name__)

Hvorfor bruke Lambda-funksjoner?

Etter det siste avsnittet lurer du kanskje på hvorfor du vil bruke en lambda funksjon. Tross alt, alt som kan gjøres med en lambda funksjon kan gjøres med en navngitt funksjon.
â € <
Svaret på dette er det lambda funksjoner formål er å leve i større uttrykk som representerer en beregning. En måte å tenke på dette er ved analogi med variabler og verdier. Tenk på følgende kode:

x = 2

Variabelen x er en plassholder (eller et navn) for heltallet 2. For eksempel å ringe print(x) og print(2) gir nøyaktig samme utgang. Når det gjelder funksjoner:

def square(x): return x**2

Funksjonen square() er en plassholder for beregning av kvadrering av et tall. Denne beregningen kan skrives på en navnløs måte som lambda x: x**2.
â € <
Etter denne filosofiske digresjonen, la oss se noen eksempler på applikasjoner for lambda funksjoner.
â € <

Bruke Lambda med funksjonen sortert().

De sorted() funksjon sorterer en iterabel. Den aksepterer en funksjon som sin key argument, og resultatet av funksjonen brukt på hvert element i iterablen brukes til å bestille elementene.
â € <
Dette passer perfekt til en lambda funksjon: ved å stille inn key parameter med en lambda funksjon, kan vi sortere etter alle slags attributter til elementene. For eksempel kan vi sortere en liste over navn etter etternavn:

name_list = ['Grace Hopper', 'Ada Lovelace', 'Emmy Noether', 'Marie Curie']
​
sorted_by_surname = sorted(name_list, key = lambda x: x.split()[1])
​
print(sorted_by_surname)
['Marie Curie', 'Grace Hopper', 'Ada Lovelace', 'Emmy Noether']

Bruke Lambda med 'filter()'-funksjonen

De filter() funksjonen har følgende syntaks: filter(function, iterable) og det gir ut elementene til iterable som vurderer function(element) som sant (det ligner på en WHERE klausul i SQL). Vi kan bruke lambda fungerer som parametere for filter() for å velge elementer fra en iterabel.

Tenk på følgende eksempel:

num_list = list(range(0,100))
​
multiples_of_15= filter(lambda x: (x % 3 == 0) and (x % 5 == 0), num_list)
​
print(list(multiples_of_15))
[0, 15, 30, 45, 60, 75, 90]

filter() bruker lambda funksjon lambda x: (x % 3 == 0) and (x % 5 == 0) til hvert element av range(0,100), og returnerer en filter gjenstand. Vi får tilgang til elementene ved å støpe det som list.
â € <

Bruke Lambda med Map()-funksjonen

â € <
Vårt siste eksempel er noe vi har sett i introduksjonen - map() funksjon. De map() funksjonssyntaks er: map(function, iterable)og map() gjelder function til hvert element av iterable, returnerer en map objekt som kan nås ved å kaste til en list.

Vi har sett hvordan dette kan brukes på lister, men det kan brukes på dikter ved å bruke dict.items() metode:

my_data = {'Mary':1, 'Alice':2, 'Bob':0}
map_obj = map(lambda x: f'{x[0]} had {x[1]} little lamb', my_data.items())
print(', '.join((map_obj)))
Mary had 1 little lamb, Alice had 2 little lamb, Bob had 0 little lamb

eller til en streng:

my_string = 'abcdefg'
''.join(map(lambda x: chr(ord(x)+2),my_string))
'cdefghi'

Sjekk ut vår praktiske, praktiske guide for å lære Git, med beste praksis, bransjeaksepterte standarder og inkludert jukseark. Slutt å google Git-kommandoer og faktisk lære den!

Vi kan bruke map() fungere på geniale måter – ett eksempel er å bruke mange funksjoner på samme inngang.

Anta for eksempel at du lager en API som mottar en tekststreng, og du vil bruke en liste over funksjoner på den.

Hver funksjon trekker ut noen funksjoner fra teksten. Funksjonene vi ønsker å trekke ut er antall ord, det andre ordet og den fjerde bokstaven i det fjerde ordet:

def number_of_words(text):
  return len(text.split())
​
def second_word(text):
  return text.split()[1]
​
def fourth_letter_of_fourth_word(text):
  return text.split()[3][3]
​
function_list = [number_of_words, second_word, fourth_letter_of_fourth_word]
​
my_text = 'Mary had a little lamb'
map_obj = map(lambda f: f(my_text), function_list)
​
feature_list = list(map_obj)
​
print(feature_list)
[5, 'had', 't']

â € <

konklusjonen

â € <
I denne veiledningen har vi utforsket funksjonaliteten til lambda funksjoner i Python. Det har vi sett lambda funksjoner er anonyme funksjoner som skal brukes som en innebygd funksjonsparameter for andre funksjoner. Vi har sett noen brukstilfeller, samt når vi ikke skal bruke dem.
â € <
Når du programmerer, er det viktig å huske på Donald Knuths sitat: "Programmer er ment å bli lest av mennesker og bare tilfeldig for datamaskiner å kjøre." Med dette i tankene, lambda funksjoner er et nyttig verktøy for å forenkle koden vår, men bør brukes med omhu.

Tidstempel:

Mer fra Stackabuse