freeCodeCamp/guide/portuguese/python/generators/index.md

2.0 KiB
Raw Blame History

title localeTitle
Generators Geradores

Geradores

Geradores são um tipo especial de função que permite retornar valores sem finalizar uma função. Isso é feito usando a palavra-chave yield . Semelhante ao return , a expressão de yield retornará um valor para o chamador. A principal diferença entre os dois é que o yield suspenderá a função, permitindo que mais valores sejam retornados no futuro.

Os geradores são iteráveis para que possam ser usados de forma limpa com loops forícios ou qualquer outra coisa que seja iterada.

def my_generator(): 
    yield 'hello' 
    yield 'world' 
    yield '!' 
 
 for item in my_generator(): 
    print(item) 
 
 # output: 
 # hello 
 # world 
 # ! 

Como outros iteradores, os geradores podem ser passados para a next função para recuperar o próximo item. Quando um gerador não tem mais valores para gerar, um erro StopIteration é gerado.

g = my_generator() 
 print(next(g)) 
 # 'hello' 
 print(next(g)) 
 # 'world' 
 print(next(g)) 
 # '!' 
 print(next(g)) 
 # Traceback (most recent call last): 
 #   File "<stdin>", line 1, in <module> 
 # StopIteration 

Os geradores são particularmente úteis quando você precisa criar um grande conjunto de valores, mas não precisa mantê-los todos na memória ao mesmo tempo. Por exemplo, se você precisar imprimir o primeiro milhão de números de fibonacci, você normalmente retornaria uma lista de um milhão de valores e iteraria na lista para imprimir cada valor. No entanto, com um gerador, você pode retornar um valor de cada vez:

def fib(n): 
    a = 1 
    b = 1 
    for i in range(n): 
        yield a 
        a, b = b, a + b 
 
 for x in fib(1000000): 
    print(x) 

Mais Informações