🐍

Funcții Lambda și Programare Funcțională

Programare Python Intermediar 1 min citire 0 cuvinte

Funcții Lambda și Programare Funcțională

Funcții Lambda

Funcțiile lambda sunt funcții anonime (fără nume), definite într-o singură linie.

Sintaxă

lambda parametri: expresie

Exemple

# Funcție clasică
def dublu(x):
    return x * 2

# Echivalent lambda
dublu = lambda x: x * 2

dublu(5)  # 10

Cu mai mulți parametri

suma = lambda a, b: a + b
suma(3, 4)  # 7

produs = lambda a, b, c: a * b * c
produs(2, 3, 4)  # 24

Funcția map()

Aplică o funcție pe fiecare element al unui iterabil.

numere = [1, 2, 3, 4, 5]

# Cu funcție normală
def patrat(x):
    return x ** 2

rezultat = list(map(patrat, numere))
# [1, 4, 9, 16, 25]

# Cu lambda
rezultat = list(map(lambda x: x ** 2, numere))
# [1, 4, 9, 16, 25]

# Cu mai multe iterabile
a = [1, 2, 3]
b = [10, 20, 30]
sume = list(map(lambda x, y: x + y, a, b))
# [11, 22, 33]

Funcția filter()

Filtrează elementele care satisfac o condiție.

numere = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Numerele pare
pare = list(filter(lambda x: x % 2 == 0, numere))
# [2, 4, 6, 8, 10]

# Șiruri nevide
texte = ["", "hello", "", "world", ""]
nevide = list(filter(lambda s: s, texte))
# ['hello', 'world']

# Sau mai simplu cu None
nevide = list(filter(None, texte))
# ['hello', 'world']

Funcția reduce()

Reduce un iterabil la o singură valoare (necesită import).

from functools import reduce

numere = [1, 2, 3, 4, 5]

# Suma
suma = reduce(lambda a, b: a + b, numere)
# 15 (calculat: ((((1+2)+3)+4)+5))

# Produs
produs = reduce(lambda a, b: a * b, numere)
# 120

# Cu valoare inițială
suma = reduce(lambda a, b: a + b, numere, 100)
# 115

Funcția sorted() cu key

cuvinte = ["banana", "mar", "portocala", "kiwi"]

# Sortare după lungime
sortate = sorted(cuvinte, key=len)
# ['mar', 'kiwi', 'banana', 'portocala']

# Sortare după al doilea caracter
sortate = sorted(cuvinte, key=lambda s: s[1])

# Sortare obiecte
studenti = [
    {"nume": "Ana", "nota": 9},
    {"nume": "Ion", "nota": 7},
    {"nume": "Maria", "nota": 10}
]
sortati = sorted(studenti, key=lambda s: s["nota"], reverse=True)

Combinarea Funcțiilor

numere = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Suma pătratelor numerelor pare
rezultat = reduce(
    lambda a, b: a + b,
    map(
        lambda x: x ** 2,
        filter(lambda x: x % 2 == 0, numere)
    )
)
# 220

# Alternativ cu comprehension (mai clar):
rezultat = sum(x**2 for x in numere if x % 2 == 0)
# 220

Când să Folosești Lambda

Potrivit pentru:

  • Funcții scurte, de o singură expresie
  • Argumente pentru map(), filter(), sorted()

Evită când:

  • Logica e complexă
  • Funcția e folosită în mai multe locuri
  • E nevoie de documentație

De Reținut

Lambda este utilă pentru funcții simple, dar comprehensions sunt adesea mai citibile. Alege soluția care face codul mai clar.

Întrebări de Verificare

  1. Care este sintaxa unei funcții lambda?
  2. Ce face filter(None, lista)?
  3. De ce are nevoie reduce() de import?
  4. Când e mai bine să folosești comprehension în loc de map/filter?

📚 Articole Corelate