---
# System prepended metadata

title: estudos-em-python-9-outubro

---

## Espaço de Tecnologias e Artes - Sesc Avenida Paulista 
## Grupo de estudos em Python 

### `hackmd.io/@sesc-av-paulista/estudos-em-python-9-outubro`

## Iteradores e funções geradoras


- Papo parelo sobre Markdown
    - *Bom dia*
    - **Galera!**
    - link [Docs do Python](https://docs.python.org/pt-br/3/)
    - Dica do Cleber: https://readme.so/pt



### `zip()` e `itertools`

```python=
from itertools import combinations, product

frutas = ['avocado', 'lichia', 'laranja',
          'melancia', 'kiwi', 'manga']

nomes = ['Eneas', 'Fernando', 'Cleber',
         'Rafaela', 'Emily', 'Tiago']

# for nome, fruta in zip(nomes, frutas):
#     print(f'{nome} gosta de {fruta}')
resultado = product(frutas, nomes)
duplas = combinations(frutas, 2)

```

Expressões geradoras

```python!
from itertools import combinations, product

frutas = ['avocado', 'lichia', 'laranja',
          'melancia', 'kiwi', 'pequi', 'manga', 'jaca', '']

nomes = ['Eneas', 'Fernando', 'Cleber',
         'Rafaela', 'Emily', '', 'Tiago', '', 'Chico']
# 
# frases_fofas = []
# for nome, fruta in zip(nomes, frutas):
#     if nome != '' and fruta != '':   # equivale a `nome` filtra nomes vazios
#         frases_fofas.append(f'{nome} gosta de {fruta}')
     
frases_fofas = (f"{nome} gosta de {fruta}" if nome != '' else 'Nome ruim'
                for nome, fruta
                in zip(nomes, frutas) if fruta)

frases_zoadas = [f'{nome} gosta de {fruta}' for nome, fruta
                in zip(nomes, frutas) if nome == '' or fruta == '']
 
for frase in frases_fofas:
    print(frase)

```

### gerador (função geradora?)

![image](https://hackmd.io/_uploads/S1_Fu8N1ke.png)


```python!

def gera_frutas(n):
    # compreensão de listas
    return [f for f in range(n)]  # devolve um lista

def gera_frutas(n):
    # expressão geradora
    return (f for f in range(n))  # devolve um gerador

def gera_frutas(n):  # função geradora (devolve um gerador?)
    for f in range(n):
        yield f

# def gera_frutas(n):  # exemplo bizarro
#     frutas = ['uva', 'banana'] * n
#     for f in range(n):
#         yield f"{f}: {frutas[f]}"
        
# para testar
for codigo_fruta in gera_frutas(5):
    print(codigo_fruta)



```