Cum să utilizați funcțiile Lambda în Python [With Examples]

În acest tutorial, veți afla totul despre funcțiile lambda în Python – de la sintaxă pentru definirea funcțiilor lambda până la diferitele cazuri de utilizare cu exemple de cod.

În Python, lambda sunt funcții anonime care au o sintaxă concisă și pot fi utilizate cu alte funcții încorporate utile. Până la sfârșitul acestui tutorial, veți învăța cum să definiți funcțiile lambda și când ar trebui să luați în considerare utilizarea lor peste funcțiile obișnuite Python.

Sa incepem!

Funcția Python Lambda: sintaxă și exemple

Iată sintaxa generală pentru a defini o funcție lambda în Python:

lambda parameter(s):return value

În sintaxa generală de mai sus:

  • lambda este cuvântul cheie pe care ar trebui să-l utilizați pentru a defini o funcție lambda, urmat de unul sau mai mulți parametri pe care ar trebui să îi ia funcția.
  • Există două puncte care separă parametrii și valoarea returnată.

💡 Când definiți o funcție lambda, trebuie să vă asigurați că valoarea returnată este calculată prin evaluarea unei expresii care se întinde pe o singură linie de cod. Veți înțelege mai bine acest lucru când vom codifica exemple.

Exemple de funcție Python Lambda

Cel mai bun mod de a înțelege funcțiile lambda este să începeți prin a rescrie funcțiile obișnuite Python ca funcții lambda.

👩🏽‍💻 Puteți codifica împreună într-un REPL Python sau în editorul online Python al tipstrick.ro.

#1. Luați în considerare următoarea funcție square(), care ia un număr, num, ca argument și returnează pătratul numărului.

def square(num):
    return num*num

Puteți apela funcția cu argumente și puteți verifica dacă funcționează corect.

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

Puteți atribui această expresie lambda unui nume de variabilă, de exemplu, pătrat1, pentru a face definiția funcției mai concisă: pătrat1 = lambda num: num*num și apoi apelați funcția square1 cu orice număr ca argument. Cu toate acestea, știm că lambda sunt funcții anonime, așa că ar trebui să evitați să le atribuiți unei variabile.

Pentru funcția square(), parametrul este num și valoarea returnată este num*num. După ce le-am identificat, le putem conecta la expresia lambda și o putem apela cu un argument, așa cum se arată:

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

Acesta este conceptul de expresie a funcției invocate imediat, unde numim o funcție imediat după ce o definim.

#2. În continuare, să rescriem o altă funcție simplă add() care ia în numere, num1 și num2, și returnează suma lor, num1 + num2.

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

Să numim funcția add() cu două numere ca argumente:

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

În acest caz, num1 și num2 sunt cei doi parametri, iar valoarea returnată este num1 + num2.

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

Funcțiile Python pot lua, de asemenea, valori implicite pentru parametri. Să modificăm definiția funcției add() și să setăm valoarea implicită a parametrului num2 la 10.

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

În următoarele apeluri de funcție:

  • În primul apel de funcție, valoarea lui num1 este 1 și valoarea lui num2 este 3. Când treceți valoarea pentru num2 în apelul de funcție, acea valoare este utilizată; funcția returnează 4.
  • Cu toate acestea, dacă introduceți un singur argument (num1 este 7), valoarea implicită de 10 este utilizată pentru num2; funcția returnează 17.
>>> add(1,3)
4
>>> add(7)
17

Când scrieți funcții care preiau valori implicite pentru anumiți parametri ca expresii lambda, puteți specifica valoarea implicită atunci când definiți parametrii.

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

Când ar trebui să utilizați funcțiile Lambda în Python?

Acum că ați învățat elementele de bază ale funcțiilor lambda în Python, iată câteva cazuri de utilizare:

  • Când aveți o funcție a cărei expresie returnată este o singură linie de cod și nu trebuie să faceți referire la funcția în altă parte din același modul, puteți utiliza funcții lambda. Am codificat și câteva exemple pentru a înțelege acest lucru.
  • Puteți utiliza funcții lambda atunci când utilizați funcții încorporate, cum ar fi map(), filter() și reduce().
  • Funcțiile Lambda pot fi utile în sortarea structurilor de date Python, cum ar fi liste și dicționare.
  10 cele mai bune umidificatoare pentru dormitoare

Cum să utilizați Python Lambda cu funcții încorporate

1. Utilizarea Lambda cu map()

Funcția map() preia un iterabil și o funcție și aplică funcția fiecărui element din iterabil, așa cum se arată:

Să creăm o listă de numere și să folosim funcția map() pentru a crea o nouă listă care conține pătratul fiecărui număr din lista de numere. Observați utilizarea funcției lambda pentru a defini operația de pătrare.

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

Deoarece funcția map() returnează un obiect map, ar trebui să îl aruncăm într-o listă.

▶️ Consultați acest tutorial despre funcția map() în Python.

2. Utilizarea Lambda cu filter()

Să definim numere, o listă de numere:

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

Să presupunem că doriți să filtrați această listă și să păstrați numai numerele impare.

Puteți utiliza funcția încorporată filter() din Python.

Funcția filter() preia o condiție și un iterabil: filter(condiție, iterabil). Rezultatul conține doar elementele din iterabilul original care satisfac condiția. Puteți arunca obiectul returnat într-un iterabil Python, cum ar fi lista.

Pentru a filtra toate numerele pare, vom păstra doar numerele impare. Deci expresia lambda ar trebui să fie lambda num: num%2!=0. Cantitatea num%2 este restul când num este împărțit la 2.

  • num%2!=0 este adevărat ori de câte ori num este impar și
  • num%2!=0 este fals ori de câte ori num este par.
>>> nums = [4,5,6,9]
>>> list(filter(lambda num:num%2!=0,nums))
[5, 9]

3. Utilizarea Lambda cu reduce()

Funcția reduce() include un iterabil și o funcție. Reduce iterabilul prin aplicarea iterativă a funcției pe elementele iterabilului.

Pentru a utiliza funcția reduce(), va trebui să o importați din modulul functools încorporat din Python:

>>> from functools import reduce

Să folosim funcția reduce() pentru a calcula suma tuturor numerelor din lista de numere. Definim o expresie lambda: lambda num1,num2:num1+num2, ca funcție de sumă reducătoare.

  6 cele mai bune soluții de imagine desktop pentru a implementa sistemul de operare

Operația de reducere va avea loc astfel: f(f(f(4,5),6),9) = f(f(9,6),9) = f(15,9) = 24. Aici, f este operația de însumare a două articole din listă, definită de funcția lambda.

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

Funcții Python Lambda pentru a personaliza sortarea

Pe lângă utilizarea funcțiilor lambda cu funcții Python încorporate, cum ar fi map(), filter() și reduce(), le puteți folosi și pentru a personaliza funcțiile și metodele încorporate utilizate pentru sortare.

1. Sortarea listelor Python

Când lucrați cu liste Python, va trebui adesea să le sortați pe baza anumitor criterii de sortare. Pentru a sorta listele Python la locul lor, puteți folosi metoda încorporată sort() pe ele. Dacă aveți nevoie de o copie sortată a listei, puteți utiliza funcția sorted().

Sintaxa pentru a utiliza funcția sortat() a lui Python este sortată (iterabil, cheie=…, inversă= Adevărat | Fals).

– Parametrul cheie este folosit pentru a personaliza sortarea.
– Parametrul invers poate fi setat la True sau False; valoarea implicită este False.

La sortarea listelor de numere și șiruri, sortarea implicită este în ordine crescătoare și, respectiv, în ordine alfabetică. Cu toate acestea, poate doriți uneori să definiți un criteriu personalizat pentru sortare.

Luați în considerare următoarele fructe din listă. Să presupunem că doriți să obțineți o copie sortată a listei. Ar trebui să sortați șirurile în funcție de numărul de apariții ale lui „p” în ele – în ordine descrescătoare.

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

Este timpul să utilizați parametrul cheie opțional. Un șir este un iterabil în Python și pentru a obține numărul de apariții ale unui caracter din el, puteți utiliza metoda încorporată .count(). Așadar, setăm cheia la lambda x:x.count(‘p’) astfel încât sortarea să se bazeze pe numărul de ori când ‘p’ apare în șir.

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

În acest exemplu:

  • Cheia de sortare este numărul de apariții ale caracterului „p” și este definită ca o expresie lambda.
  • Deoarece am setat parametrul invers la True, sortarea are loc în ordinea descrescătoare a numărului de apariții ale lui „p”.
  8 Angajați platforme de marketing pentru a angaja cel mai bun expert în marketing prin e-mail

În lista de fructe, „ananas” conține 3 apariții pentru „p”, iar șirurile „măr”, „struguri” și „mango” conțin 2, 1 și, respectiv, 0 apariții pentru „p”.

Înțelegerea sortării stabile

Luați în considerare un alt exemplu. Pentru același criteriu de sortare, am redefinit lista de fructe. Aici, „p” apare în șirurile „măr” și „struguri” de două ori, respectiv o dată. Și nu apare niciodată în șirurile „mango” și „pepene galben”.

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

În lista de ieșiri, „mango” vine înaintea „pepene galben”, chiar dacă ambele nu au caracterul „p”. Dar de ce este acesta cazul? Funcția sorted() efectuează o sortare stabilă; deci, atunci când numărul de „p” este egal pentru două șiruri, ordinea elementelor din lista originală de fructe este păstrată.

Ca un exercițiu rapid, schimbați pozițiile „mango” și „pepene galben” în lista de fructe, sortați lista în funcție de același criteriu și observați rezultatul.

▶️ Aflați mai multe despre sortarea listelor Python.

2. Sortarea unui dicționar Python

De asemenea, puteți utiliza lambda atunci când sortați dicționarele Python. Luați în considerare următorul dicționar price_dict care conține articole și prețurile acestora.

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

Pentru a obține perechile cheie-valoare ale unui dicționar ca o listă de tupluri, puteți utiliza metoda încorporată a dicționarului .items():

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

În Python, toate iterabilele: liste, tupluri, șiruri de caractere și altele, urmează zero-indexarea. Deci primul articol este la indexul 0, al doilea element este la indexul 1 și așa mai departe.

Am dori să sortăm după valoare, care este prețul fiecărui articol din dicționar. În fiecare tuplu din lista price_dict_items, articolul de la indicele 1 este prețul. Deci setăm cheia la lambda x:x[1] deoarece va folosi articolul de la indexul 1, prețul, pentru a sorta dicționarul.

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

În ieșire, articolele din dicționar au fost sortate în ordine crescătoare a prețurilor: începând cu „Boomoane”, la prețul de la 3 unități până la „Miere”, la preț de 15 unități.

▶️ Pentru a afla mai multe, consultați acest ghid detaliat despre sortarea unui dicționar Python după cheie și valoare.

Rezumând

Și iată-l! Ați învățat cum să definiți funcțiile lambda și să le utilizați eficient cu alte funcții încorporate Python. Iată un rezumat al principalelor concluzii:

  • În Python, lambda sunt funcții anonime care pot prelua mai multe argumente și pot returna o valoare; expresia care trebuie evaluată pentru a genera această valoare returnată ar trebui să fie o linie de cod. Ele pot fi folosite pentru a face definițiile micilor funcții mai concise.
  • Pentru a defini funcția Lambda puteți utiliza sintaxa: parametru(i) lambda: valoare de returnare.
  • Unele dintre cazurile de utilizare importante includ utilizarea lor cu funcțiile map(), filter() și reduce() și ca parametru cheie pentru a personaliza sortarea iterabilelor Python.

Apoi, aflați cum să efectuați împărțirea podelei în Python.