Conținut curs
Python Avansat
Despre lecție
  1. Recapitulare funcții lambda și expresii funcționale

    • Ce sunt funcțiile lambda și de ce sunt utile
    • Exemple de utilizare a funcțiilor lambda
    • Expresiile funcționale map(), filter(), reduce()
  2. Lucrul avansat cu funcții lambda în combinație cu expresiile funcționale

    • Combinarea funcțiilor lambda cu map(), filter() și reduce()
    • Exemple de utilizare avansată a funcțiilor lambda și expresiilor funcționale
    • Exercițiu: utilizați funcții lambda și expresii funcționale pentru a calcula media aritmetică a unei liste de numere
  3. Funcții lambda în combinație cu operatorul ternar

    • Utilizarea operatorului ternar în funcții lambda
    • Exemple de funcții lambda cu operatorul ternar
    • Exercițiu: creați o funcție lambda cu operatorul ternar pentru a returna cel mai mare număr divizibil cu 3 dintre două numere
  4. Crearea de funcții de ordonare personalizate cu funcții lambda

    • Utilizarea funcțiilor lambda în argumentul ‘key’ al funcției sorted()
    • Exemple de funcții de ordonare personalizate cu funcții lambda
    • Exercițiu: utilizați o funcție lambda pentru a sorta o listă de cuvinte în ordinea lungimii lor
  5. Funcții lambda în combinație cu decoratori

    • Utilizarea funcțiilor lambda ca decoratori
    • Exemple de decoratori creați cu funcții lambda
    • Exercițiu: creați un decorator cu o funcție lambda pentru a înregistra apelurile unei funcții
  6. Utilizarea funcțiilor lambda în contextul programării funcționale

    • Programarea funcțională și rolul funcțiilor lambda
    • Exemple de utilizare a funcțiilor lambda în contextul programării funcționale
    • Exercițiu: scrieți un program funcțional care utilizează funcții lambda pentru a procesa o listă de date

Exemple și exerciții pentru fiecare subpunct:

Exemplu: combinarea funcțiilor lambda cu map(), filter() și reduce()

python
from functools import reduce

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

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

numere_pare = list(filter(lambda x: x % 2 == 0, numere))
print(numere_pare)  # Output: [2, 4]

suma = reduce(lambda x, y: x + y, numere)
print(suma)  # Output: 15

Exercițiu:

Utilizați funcții lambda și expresii funcționale pentru a calcula media aritmetică a unei liste de numere.

Exemplu: funcție lambda cu operatorul ternar

python
max_divizibil_cu_3 = lambda x, y: x if x % 3 == 0 and x >= y else y if y % 3 == 0 else None
print(max_divizibil_cu_3(9, 6))  # Output: 9
print(max_divizibil_cu_3(10, 5))  # Output: None

Exercițiu:

Creați o funcție lambda cu operatorul ternar pentru a returna cel mai mare număr divizibil cu 3 dintre două numere.

Exemplu: utilizarea funcției lambda în argumentul ‘key’ al funcției sorted()

python
cuvinte = ["casa", "masina", "caine", "pisica", "elefant"]

cuvinte_sortate = sorted(cuvinte, key=lambda x: len(x))
print(cuvinte_sortate)  # Output: ['casa', 'caine', 'pisica', 'masina', 'elefant']

Exercițiu:

Utilizați o funcție lambda pentru a sorta o listă de cuvinte în ordinea lungimiilor.

Exemplu: decoratori creați cu funcții lambda

python
import time

log_decorator = lambda fn: (lambda *args, **kwargs: (print(f"Apelând funcția {fn.__name__}"), fn(*args, **kwargs))[1])

@log_decorator
def suma(a, b):
    return a + b

print(suma(3, 5))  # Output: Apelând funcția suma
                  #         8

Exercițiu:

Creați un decorator cu o funcție lambda pentru a înregistra apelurile unei funcții.

Exemplu: utilizarea funcțiilor lambda în contextul programării funcționale

python
from functools import reduce

date = [
    {"nume": "Ana", "varsta": 27, "salariu": 3500},
    {"nume": "Ion", "varsta": 32, "salariu": 4200},
    {"nume": "Maria", "varsta": 24, "salariu": 3000},
    {"nume": "Dan", "varsta": 29, "salariu": 3800}
]

# Filtrăm angajații cu vârsta sub 30 de ani.
angajati_sub_30 = list(filter(lambda x: x["varsta"] < 30, date))

# Calculăm suma salariilor angajaților sub 30 de ani.
suma_salarii = reduce(lambda acumulator, angajat: acumulator + angajat["salariu"], angajati_sub_30, 0)

# Calculăm media salariilor angajaților sub 30 de ani.
media_salarii = suma_salarii / len(angajati_sub_30)

print(f"Media salariilor pentru angajații sub 30 de ani este: {media_salarii:.2f}")  # Output: 3433.33

Exercițiu:

Scrieți un program funcțional care utilizează funcții lambda pentru a procesa o listă de date. Alegeți un set de date și aplicați operațiuni precum filtrare, sortare și agregare.