Resumo : neste tutorial, você aprenderá sobre a expressão geradora Python para criar um objeto gerador.
Introdução às expressões geradoras
Uma expressão geradora é uma expressão que retorna um objeto gerador .
Basicamente, uma função geradora é uma função que contém uma yield
instrução e retorna um objeto gerador.
Por exemplo, o seguinte define uma função geradora:
def squares(length):
for n in range(length):
yield n ** 2
Linguagem de código: JavaScript ( javascript )
A squares
função geradora retorna um objeto gerador que produz números quadrados de inteiros de 0
até length - 1
.
Como um objeto gerador é um iterador , você pode usar um loop for para iterar sobre seus elementos:
for square in squares(5):
print(square)
Linguagem de código: PHP ( php )
Saída:
0
1
4
9
16
Uma expressão geradora fornece uma maneira mais simples de retornar um objeto gerador.
O exemplo a seguir define uma expressão geradora que retorna números quadrados de inteiros de 0 a 4:
squares = (n** 2 for n in range(5))
Como the squares
é um objeto gerador, você pode iterar sobre seus elementos assim:
for square in squares:
print(square)
Linguagem de código: PHP ( php )
Como você pode ver, em vez de usar uma função para definir uma função geradora, você pode usar uma expressão geradora.
Uma expressão geradora é como uma compreensão de lista em termos de sintaxe. Por exemplo, uma expressão geradora também suporta sintaxes complexas, incluindo:
- declarações if
- Vários loops aninhados
- Compreensões aninhadas
No entanto, uma expressão geradora usa parênteses ()
em vez de colchetes []
.
Expressões geradoras vs compreensões de lista
A seguir mostramos como usar a compreensão de lista para gerar números quadrados de 0 a 4:
square_list = [n** 2 for n in range(5)]
E isso define um gerador de números quadrados:
square_generator = (n** 2 for n in range(5))
1) Sintaxe
Em termos de sintaxe, uma expressão geradora usa parênteses ()
enquanto uma compreensão de lista usa colchetes []
.
2) Utilização de memória
Uma compreensão de lista retorna uma lista enquanto uma expressão geradora retorna um objeto gerador.
Isso significa que uma compreensão de lista retorna uma lista completa de elementos antecipadamente. No entanto, uma expressão geradora retorna uma lista de elementos, um de cada vez, com base na solicitação.
A compreensão de uma lista é rápida, enquanto uma expressão geradora é preguiçosa.
Em outras palavras, uma compreensão de lista cria todos os elementos imediatamente e carrega todos eles na memória.
Por outro lado, uma expressão geradora cria um único elemento com base na solicitação. Ele carrega apenas um único elemento na memória.
3) Iterável vs iterador
Uma compreensão de lista retorna um iterável . Isso significa que você pode iterar o resultado de uma compreensão de lista repetidas vezes.
No entanto, uma expressão geradora retorna um iterador , especificamente um iterador lento. Torna-se exaustivo quando você conclui a iteração.
Resumo
- Use uma expressão de gerador Python para retornar um gerador.