Conținut curs
Gestionarea erorilor și excepțiilor
0/1
Python Intermediar
Despre lecție

Introducere

În această lecție, vom explora în detaliu un aspect important al limbajului Python – funcțiile lambda avansate. Funcțiile lambda sunt o caracteristică a Python care permite crearea rapidă și concisă a unor funcții anonime. Vom examina diverse exemple și scenarii de utilizare pentru a înțelege cum funcțiile lambda pot îmbunătăți eficiența și lizibilitatea codului.

Cuprins

  1. Recapitulare: Ce sunt funcțiile lambda în Python
  2. Utilizarea funcțiilor lambda cu map(), filter() și reduce()
  3. Funcții lambda în interiorul altor funcții
  4. Funcții lambda cu argumente multiple și implicite
  5. Înlocuirea funcțiilor lambda cu list comprehensions și set comprehensions
  6. Dezavantajele și limitările funcțiilor lambda
  7. Încheiere și concluzii

1. Recapitulare: Ce sunt funcțiile lambda în Python

Funcțiile lambda, cunoscute și sub denumirea de funcții anonime, sunt o metodă concisă de a declara funcții mici. Sunt ideale pentru situații în care aveți nevoie de o funcție simplă și nu doriți să creați o funcție completă folosind def. Sintaxa generală pentru o funcție lambda este:

python
lambda argumente: expresie

De exemplu, o funcție lambda care adună două numere ar putea arăta așa:

python
adunare = lambda x, y: x + y
print(adunare(5, 3))  # Output: 8

2. Utilizarea funcțiilor lambda cu map(), filter() și reduce()

Funcțiile lambda sunt adesea utilizate în combinație cu funcțiile map(), filter() și reduce() pentru a aplica o funcție la o structură de date.

map()

Funcția map() aplică o funcție la toate elementele unei colecții și returnează un obiect mapă. De exemplu, să înmulțim toate numerele dintr-o listă cu 2:

python
numere = [1, 2, 3, 4, 5]
dublu = list(map(lambda x: x * 2, numere))
print(dublu)  # Output: [2, 4, 6, 8, 10]

filter()

Funcția filter() filtrează elementele unei colecții pe baza unei funcții și returnează un obiect filtru. De exemplu, să păstrăm doar numerele pare dintr-o listă:

python
numere = [1, 2, 3, 4, 5]
pare = list(filter(lambda x: x % 2 == 0, numere))
print(pare)  # Output: [2, 4]

reduce()

Funcția reduce() aplică o funcție care preia două argumente și le combină într-un singur rezultat. Pentru a utiliza reduce(), trebuie să importăm funcția din modulul functools. De exemplu, să calculăm produsul numerelor dintr-o listă:

python
from functools import reduce

numere = [1, 2, 3, 4, 5]
produs = reduce(lambda x, y: x * y, numere)
print(produs)  # Output: 120

3. Funcții lambda în interiorul altor funcții

Putem folosi funcțiile lambda și în interiorul altor funcții pentru a crea funcții de înaltă ordine. De exemplu, să creăm o funcție care returnează o funcție lambda care ridică un număr la o putere specificată:

python
def putere(n):
    return lambda x: x ** n

pătrat = putere(2)
cub = putere(3)

print(pătrat(4))  # Output: 16
print(cub(4))     # Output: 64
### 4. Funcții lambda cu argumente multiple și implicite

Funcțiile lambda pot accepta mai multe argumente și pot avea și argumente implicite. Să examinăm un exemplu în care avem o funcție lambda care adaugă două numere și are un al treilea argument implicit care reprezintă o valoare de multiplicare:

```python
adunare_si_multiplicare = lambda x, y, z=1: (x + y) * z
print(adunare_si_multiplicare(3, 5))        # Output: 8
print(adunare_si_multiplicare(3, 5, 2))     # Output: 16

Aici, funcția lambda acceptă trei argumente – x, y și z. Argumentul z are o valoare implicită de 1, care va fi folosită dacă nu este furnizată o valoare la apelare.

5. Înlocuirea funcțiilor lambda cu list comprehensions și set comprehensions

În unele cazuri, funcțiile lambda pot fi înlocuite cu list comprehensions sau set comprehensions pentru a obține același rezultat. De exemplu, să înmulțim toate numerele dintr-o listă cu 2 folosind o list comprehension:

python
numere = [1, 2, 3, 4, 5]
dublu = [x * 2 for x in numere]
print(dublu)  # Output: [2, 4, 6, 8, 10]

Aceasta este o alternativă la utilizarea funcției lambda cu map() prezentată în secțiunea 2.

6. Dezavantajele și limitările funcțiilor lambda

Deși funcțiile lambda sunt utile în anumite situații, ele au și dezavantaje și limitări:

  1. Lizibilitatea: Funcțiile lambda pot fi mai greu de înțeles pentru programatori care nu sunt familiarizați cu acest concept.
  2. Funcții simple: Funcțiile lambda pot conține doar o singură expresie și nu pot include declarații. Acest lucru le face nepotrivite pentru funcții mai complexe.
  3. Întreținerea codului: În cazul în care funcția lambda devine mai complexă sau trebuie să fie modificată în viitor, poate fi dificil să se actualizeze sau să se refactoreze codul.

7. Încheiere și concluzii

În această lecție, am examinat în detaliu funcțiile lambda avansate în Python, care permit crearea rapidă și concisă a unor funcții anonime. Am discutat despre utilizarea funcțiilor lambda în combinație cu map(), filter() și reduce(), cum să folosim funcții lambda în interiorul altor funcții, cum să gestionăm argumentele multiple și implicite, și cum să înlocuim funcțiile lambda cu list comprehensions și set comprehensions.

Deși funcțiile lambda pot fi utile în anumite scenarii și pot îmbunătăți concizia codului, este important să le folosiți cu discernământ și să luați în considerare lizibilitatea și întreținerea codului înainte de a le utiliza.

Înainte de a încheia, iată un exemplu final care demonstrează cum să utilizați o funcție lambda pentru a sorta o listă de tuple în funcție de al doilea element al fiecărei tuple:

python
lista_tuple = [('a', 3), ('b', 1), ('c', 2)]
lista_sortata = sorted(lista_tuple, key=lambda x: x[1])
print(lista_sortata)  # Output: [('b', 1), ('c', 2), ('a', 3)]

Acest exemplu arată cum funcțiile lambda pot fi utilizate în mod eficient pentru a rezolva probleme specifice într-un mod concis și elegant.