Introdução a expressões geradoras

Caixa de ferramentas Python

Hugo Bowne-Anderson

Data Scientist at DataCamp

Expressões geradoras

  • Relembrando compreensão de lista
[2 * num for num in range(10)]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
  • Use ( ) em vez de [ ]
(2 * num for num in range(10))
<generator object <genexpr> at 0x1046bf888>
Caixa de ferramentas Python

Compreensões de lista vs. geradores

  • Compreensão de lista: retorna uma lista
  • Geradores: retornam um objeto gerador
  • Ambos são iteráveis
Caixa de ferramentas Python

Imprimindo valores de geradores (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]
Caixa de ferramentas Python

Imprimindo valores de geradores (2)

result = (num for num in range(6))
  • Avaliação preguiçosa
print(next(result))
0
print(next(result))
1
print(next(result))
2
print(next(result))
3
print(next(result))
4
Caixa de ferramentas Python

Geradores vs. compreensões de lista

Caixa de ferramentas Python

Geradores vs. compreensões de lista

Caixa de ferramentas Python

Geradores vs. compreensões de lista

Caixa de ferramentas Python

Condicionais em expressões geradoras

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

print(list(even_nums))
[0, 2, 4, 6, 8]
Caixa de ferramentas Python

Funções geradoras

  • Produzem objetos geradores quando chamadas
  • Definidas como funções normais - def
  • Geram uma sequência de valores em vez de retornar um só
  • Geram valores com a palavra-chave yield
Caixa de ferramentas Python

Crie uma função geradora

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

Use uma função geradora

result = num_sequence(5)

print(type(result))
<class 'generator'>
for item in result:
    print(item)
0
1
2
3
4
Caixa de ferramentas Python

Vamos praticar!

Caixa de ferramentas Python

Preparing Video For Download...