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