Introducere în expresiile generator

Cutia cu instrumente Python

Hugo Bowne-Anderson

Data Scientist at DataCamp

Expresii generator

  • Reamintire list comprehension
[2 * num for num in range(10)]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
  • Folosiți ( ) în loc de [ ]
(2 * num for num in range(10))
<generator object <genexpr> at 0x1046bf888>
Cutia cu instrumente Python

List comprehensions vs. generatoare

  • List comprehension - returnează o listă
  • Generatoare - returnează un obiect generator
  • Ambele pot fi iterate
Cutia cu instrumente Python

Afișarea valorilor din generatoare (1)

result = (num for num in range(6))

for num in result: print(num)
0
1
2
3
4
5
result = (num for num in range(6))

print(list(result))
[0, 1, 2, 3, 4, 5]
Cutia cu instrumente Python

Afișarea valorilor din generatoare (2)

result = (num for num in range(6))
  • Evaluare leneșă
print(next(result))
0
print(next(result))
1
print(next(result))
2
print(next(result))
3
print(next(result))
4
Cutia cu instrumente Python

Generatoare vs. list comprehensions

Cutia cu instrumente Python

Generatoare vs. list comprehensions

Cutia cu instrumente Python

Generatoare vs. list comprehensions

Cutia cu instrumente Python

Condiții în expresiile generator

even_nums = (num for num in range(10) if num % 2 == 0)

print(list(even_nums))
[0, 2, 4, 6, 8]
Cutia cu instrumente Python

Funcții generator

  • Produce obiecte generator când este apelată
  • Definită ca o funcție obișnuită - def
  • Returnează o secvență de valori, nu una singură
  • Generează valori cu cuvântul cheie yield
Cutia cu instrumente Python

Construiți o funcție generator

  • sequence.py
def num_sequence(n):
    """Generate values from 0 to n."""
    i = 0
    while i < n:
        yield i
        i += 1
Cutia cu instrumente Python

Utilizați o funcție generator

result = num_sequence(5)

print(type(result))
<class 'generator'>
for item in result:
    print(item)
0
1
2
3
4
Cutia cu instrumente Python

Să exersăm!

Cutia cu instrumente Python

Preparing Video For Download...