Conținut curs
Python Avansat
Despre lecție
  1. Introducere în biblioteca functools

    • Ce este biblioteca functools și scopul său
    • Importarea bibliotecii functools și examinarea funcțiilor disponibile
  2. Funcția functools.reduce()

    • Cum funcționează reduce()
    • Exemple de utilizare a funcției reduce()
    • Compararea cu funcția itertools.accumulate()
    • Exerciții practice
  3. Funcția functools.partial()

    • Cum funcționează partial()
    • Exemple de utilizare a funcției partial()
    • Exerciții practice
  4. Funcția functools.lru_cache()

    • Ce este memoization și cum poate îmbunătăți performanța
    • Cum funcționează decoratorul lru_cache()
    • Exemple de utilizare a funcției lru_cache()
    • Exerciții practice
  5. Funcții functools.total_ordering și functools.cmp_to_key()

    • Cum funcționează decoratorul total_ordering
    • Exemple de utilizare a funcției total_ordering
    • Cum funcționează funcția cmp_to_key()
    • Exemple de utilizare a funcției cmp_to_key()
    • Exerciții practice

Exemple și exerciții pentru fiecare subpunct:

Exemplu: functools.reduce()

python
import functools

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

Exercițiu:

Folosiți functools.reduce() pentru a calcula suma pătratelor numerelor dintr-o listă.

Exemplu: functools.partial()

python
import functools

def inmultire(x, y):
    return x * y

dublu = functools.partial(inmultire, 2)
print(dublu(5))  # Output: 10

Exercițiu:

Folosiți functools.partial() pentru a crea o funcție care ridică la pătrat numerele.

Exemplu: functools.lru_cache()

python
import functools

@functools.lru_cache(maxsize=None)
def fibonacci(n):
    if n <= 1:
        return n
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)

print(fibonacci(100))  # Output: 354224848179261915075

Exercițiu:

Aplicați memoization cu ajutorul functools.lru_cache() pentru a calcula factorialul unui număr.

Exemplu: functools.total_ordering

python
import functools

@functools.total_ordering
class Zecimal:
    def __init__(self, zecimal):
        self.zecimal = zecimal

    def __eq__(self, other):
        return self.zecimal == other.zecimal

    def __lt__(self, other):
        return self.zecimal < other.zecimal

a = Zecimal(0.5)
b = Zecimal(0.3)

print(a > b)  # Output: True

Exercițiu:

Implementați o clasă Fractie folosind functools.total_ordering pentru a compara fracții.

Exemplu: functools.cmp_to_key()

python
import functools

def comparare(a, b):
    return len(a) - len(b)

lista_cuvinte = ["pisica", "caine", "elefant", "cal", "urs"]
lista_sortata = sorted(lista_cuvinte, key=functools.cmp_to_key(comparare))

print(lista_sortata)  # Output: ['cal', 'urs', 'caine', 'pisica', 'elefant']

Exercițiu:

Sortați o listă de numere în funcție de numărul de divizori, folosind functools.cmp_to_key().

Rezumat:

În această lecție, am învățat despre biblioteca functools și cum să folosim funcțiile sale pentru a îmbunătăți performanța și pentru a simplificacodul în programarea funcțională. Am explorat funcții precum reduce(), partial(), lru_cache(), total_ordering și cmp_to_key(), înțelegând cum funcționează și cum să le aplicăm în diverse situații.

Am realizat exerciții practice pentru a ne familiariza cu utilizarea acestor funcții și să ne dezvoltăm abilitățile în programarea funcțională.