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.
# 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:
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:
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:
-
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ă.
-
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.
-
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:
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:
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:
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.