## 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?)

```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)
```