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

Obiective:

  • Introducerea conceptului de expresii generatoare
  • Sintaxa și utilizarea expresiilor generatoare
  • Diferențele dintre expresiile generatoare și list comprehensions
  • Exemple practice și aplicații ale expresiilor generatoare

Introducere: Expresii generatoare

Expresiile generatoare sunt o metodă concisă și eficientă de a crea generatoare în Python. Acestea sunt similare cu list comprehensions, dar în loc să genereze o listă completă de elemente, ele creează un generator care produce elementele pe măsură ce sunt solicitate. Acest lucru face ca expresiile generatoare să fie mai eficiente în ceea ce privește memoria și timpul de execuție pentru secvențele mari și operațiile costisitoare.

Sintaxa și utilizarea expresiilor generatoare

Sintaxa expresiilor generatoare este similară cu cea a list comprehensions, cu excepția faptului că se utilizează paranteze rotunde în loc de pătrate.

python
# List comprehension
lista = [x * x for x in range(5)]

# Expresie generatoare
generator = (x * x for x in range(5))

Pentru a itera prin elementele unui generator creat cu o expresie generatoare, putem folosi un for:

python
for valoare in (x * x for x in range(5)):
    print(valoare)

Sau putem folosi funcția next() pentru a accesa următorul element din generator:

python
gen = (x * x for x in range(5))
print(next(gen))  # Output: 0
print(next(gen))  # Output: 1

Diferențele dintre expresiile generatoare și list comprehensions

Deși sintaxa este similară, există diferențe importante între expresiile generatoare și list comprehensions:

  1. Memorie: Expresiile generatoare consumă mai puțină memorie deoarece generează elementele pe măsură ce sunt solicitate, în timp ce list comprehensions generează toate elementele deodată și le stochează într-o listă.

  2. Timp de execuție: Expresiile generatoare pot fi mai rapide în cazul secvențelor mari sau a operațiilor costisitoare, deoarece elementele sunt calculate pe măsură ce sunt solicitate.

  3. Utilizare: List comprehensions sunt mai potrivite pentru cazurile în care avem nevoie de o listă completă a elementelor, în timp ce expresiile generatoare sunt mai potrivite pentru cazurile în care avem nevoie să iterăm prin elemente fără a le stoca într-o listă.

Exemple practice și aplicații ale expresiilor generatoare

1. Suma pătratelor numerelor pare

Calculăm suma pătratelor numerelor pare de la 1 la 100 folosind o expresie generatoare:

python
suma_pătrate_pare = sum(x * x for x in range(1, 101) if x % 2 == 0)
print(suma_pătrate_pare)  # Output: 171700

2. Produsul numerelor impare

Calculăm produsul numerelor impare de la 1 la 9 folosind o expresie generatoare și funcția reduce() din modulul functools:

python
from functools import reduce
import operator

produs_impare = reduce(operator.mul, (x for x in range(1, 10) if x % 2 == 1))
print(produs_impare)  # Output: 945

3. Lungimea cuvintelor dintr-o propoziție

Determinăm lungimea cuvintelor dintr-o propoziție folosind o expresie generatoare:

python
propoziție = "Expresiile generatoare sunt utile în Python"
lungimi_cuvinte = list(len(cuvânt) for cuvânt in propoziție.split())
print(lungimi_cuvinte)  #Output: [11, 13, 5, 9, 6]

În această lecție, am învățat despre expresiile generatoare în Python, o metodă concisă și eficientă de a crea generatoare. Am discutat despre sintaxa și utilizarea expresiilor generatoare, precum și diferențele dintre acestea și list comprehensions. De asemenea, am explorat exemple practice și aplicații ale expresiilor generatoare. Acest concept este util pentru a economisi timp și memorie în cazul operațiilor costisitoare și a secvențelor mari.