Slide 1

Slide 1 text

Escrevendo Python com Garbo e Elegância.

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

Exemplo ruim

Slide 4

Slide 4 text

Iterando sobre um intervalo de numeros for number in [0, 1, 2, 3, 4, 5] print(number**2)

Slide 5

Slide 5 text

Iterando sobre um intervalo de numeros for number in [0, 1, 2, 3, 4, 5] print(number**2) for number in range(6): print(number**2)

Slide 6

Slide 6 text

Iterando sobre um intervalo de numeros for number in [0, 1, 2, 3, 4, 5] print(number**2) for number in range(6): print(number**2) # Um iterador uma vez consumido, se esgota! for number in iter(range(6)): print(number**2)

Slide 7

Slide 7 text

Iterando sobre um intervalo de números for number in [0, 1, 2, 3, 4, 5] print(number**2) for number in range(6): print(number**2) # Um iterador uma vez consumido, se esgota, levantando um `StopIteration`. for number in iter(range(6)): print(number**2) ## Python Legado (2) for number in xrange(6): print(number**2)

Slide 8

Slide 8 text

Iterando sobre uma coleção cores = [“preto”, “azul”, “amarelo”, “verde”] for i in range(len(cores)): print(cores[i])

Slide 9

Slide 9 text

Iterando sobre uma coleção cores = [“preto”, “azul”, “amarelo”, “verde”] for i in range(len(cores)): print(cores[i]) for cor in cores: print(cor) # Dica para criar uma lista de forma mais fácil cores = “preto, azul, amarelo, verde”.split(‘,’)

Slide 10

Slide 10 text

Iterando de trás pra frente cores = [“preto”, “azul”, “amarelo”, “verde”] for i in range(len(cores)-1, -1, -1): print(colors[i])

Slide 11

Slide 11 text

Iterando de trás pra frente cores = [“preto”, “azul”, “amarelo”, “verde”] for i in range(len(cores)-1, -1, -1): print(colors[i]) for cor in reversed(cores): print(cor)

Slide 12

Slide 12 text

Iterando de trás pra frente cores = [“preto”, “azul”, “amarelo”, “verde”] for i in range(len(cores)-1, -1, -1): print(colors[i]) for cor in reversed(cores): print(cor) for cor in cores[::-1]: print(cor)

Slide 13

Slide 13 text

Iterando sobre uma coleção e seus índices cores = [“preto”, “azul”, “amarelo”, “verde”] for i in range(len(cores)): print(f”{i} --> {cores[i]}”)

Slide 14

Slide 14 text

Iterando sobre uma coleção e seus índices cores = [“preto”, “azul”, “amarelo”, “verde”] for indice in range(len(cores)): print(f”{indice} --> {cores[indice]}”) for indice, cor in enumerate(cores): print(f”{indice} --> {cores[indice]}”)

Slide 15

Slide 15 text

Iterando sobre uma duas coleções notas = [10, 20, 30] alunos = [“mariatta”, “guido”, “lukasz”, “raymond”] n = min(len(names), len(colors)) for i in range(n): print(f”{notas[n]} --> {alunos[n]}”)

Slide 16

Slide 16 text

Iterando sobre uma duas coleções notas = [10, 20, 30] alunos = [“mariatta”, “guido”, “lukasz”, “raymond”] n = min(len(names), len(colors)) for i in range(n): print(f”{notas[n]} --> {alunos[n]}”) for nota, aluno in zip(notas, alunos): print(f”{nota} --> {aluno}”)

Slide 17

Slide 17 text

Iterando sobre uma coleção ordenada alunos = [“mariatta”, “guido”, “lukasz”, “raymond”] for aluno in sorted(alunos): print(aluno)

Slide 18

Slide 18 text

Iterando sobre uma coleção ordenada alunos = [“mariatta”, “guido”, “lukasz”, “raymond”] for aluno in sorted(alunos): print(aluno) for aluno in sorted(alunos, reverse=True): print(aluno)

Slide 19

Slide 19 text

Ordem customizada alunos = [“mariatta”, “guido”, “lukasz”, “raymond”] # Python 2.7 def compara_tamanho(c1, c2): if len(c1) < len(c2): return -1 if len(c1) > len(c2): return 1 return 0 print(sorted(alunos, cmp=compara_tamanho))

Slide 20

Slide 20 text

Ordem customizada alunos = [“mariatta”, “guido”, “lukasz”, “raymond”] # Python 2.7 def compara_tamanho(c1, c2): if len(c1) < len(c2): return -1 if len(c1) > len(c2): return 1 return 0 print(sorted(alunos, cmp=compara_tamanho)) print(sorted(alunos, key=len))

Slide 21

Slide 21 text

Ordenando uma lista de tuplas from operator import itemgetter notas = [30, 10, 50, 23] alunos = [“mariatta”, “guido”, “lukasz”, “raymond”] nota_aluno = list(zip(notas, alunos)) print(sorted(nota_aluno, key=itemgetter(0)))

Slide 22

Slide 22 text

Ordenando uma lista de tuplas (DESC) from operator import itemgetter notas = [30, 10, 50, 23] alunos = [“mariatta”, “guido”, “lukasz”, “raymond”] nota_aluno = list(zip(notas, alunos)) print(sorted(nota_aluno, key=itemgetter(0))) print(sorted(nota_aluno, key=itemgetter(0)), reverse=True)

Slide 23

Slide 23 text

Múltiplos pontos de saída de um loop def find(seq, target): found = False for i, value in enumerate(seq): if value == target: found = True break if not found: return -1 return i

Slide 24

Slide 24 text

Múltiplos pontos de saída de um loop def find(seq, target): found = False for i, value in enumerate(seq): if value == target: found = True break if not found: return -1 return i # No Python, o else é um bloco individual acoplável a qualquer body (if, for, while, try...) def find(seq, target): for i, value in enumerate(seq): if value == target: break else: return -1 return i

Slide 25

Slide 25 text

Iterando sobre as chaves de um dicionário dicionario = dict(guido=’azul’, matthew=’verde’, mariatta=’vermelho’) for key in dicionario: print(key)

Slide 26

Slide 26 text

Iterando sobre as chaves de um dicionário dicionario = dict(guido=’azul’, matthew=’verde’, mariatta=’vermelho’) for key in dicionario: print(key) # Python3 não permite que você itere sobre uma instância do dicionário e a modifique, por # isso precisamos usar o método `copy()` for key in dicionario.copy().keys(): if key.startswith(‘m’): del dicionario[key]

Slide 27

Slide 27 text

Iterando sobre as chaves de um dicionário dicionario = dict(guido=’azul’, matthew=’verde’, mariatta=’vermelho’) for key in dicionario: print(key) # Python3 não permite que você itere sobre uma instância do dicionário e a modifique, por # isso precisamos usar o método `copy()` for key in dicionario.copy().keys(): if key.startswith(‘m’): del dicionario[key] new_dict = {k: dicionario[k] for k in dicionario if not k.startswith(‘m’)}

Slide 28

Slide 28 text

Iterando sobre as chaves e valores dicionario = dict(guido=’azul’, matthew=’verde’, mariatta=’vermelho’) for k in d: print(f”{k} --> {d[k]}”

Slide 29

Slide 29 text

Iterando sobre as chaves e valores dicionario = dict(guido=’azul’, matthew=’verde’, mariatta=’vermelho’) for k in dicionario: print(f”{k} --> {d[k]}” for k, v in dicionario.items(): print(f”{k} --> {v}”

Slide 30

Slide 30 text

Criando um dicionario a partir de duas listas notas = [30, 10, 50, 23] alunos = [“mariatta”, “guido”, “lukasz”, “raymond”] print(dict(zip(notas, alunos))

Slide 31

Slide 31 text

Criando um dicionário a partir de duas listas notas = [30, 10, 50, 23] alunos = [“mariatta”, “guido”, “lukasz”, “raymond”] print(dict(zip(notas, alunos)) print(dict(enumerate(alunos)))

Slide 32

Slide 32 text

Contando com dicionários cores = “verde,azul,verde,amarelo,verde,azul”.split(‘,’) cor_dict = {} for cor in cores: if cor not in cor_dict: cor_dict[cor] = 0 cor_dict[cor] += 1 out: {'verde': 3, 'azul': 2, 'amarelo': 1}

Slide 33

Slide 33 text

Contando com dicionários cores = “verde,azul,verde,amarelo,verde,azul”.split(‘,’) cor_dict = {} for cor in cores: if cor not in cor_dict: cor_dict[cor] = 0 cor_dict[cor] += 1 out: {'verde': 3, 'azul': 2, 'amarelo': 1} cor_dict = {} for cor in cores: cor_dict[cor] = cor_dict.get(cor,0) + 1

Slide 34

Slide 34 text

Contando com dicionários from collections import defaultdict cores = “verde,azul,verde,amarelo,verde,azul”.split(‘,’) cor_dict = {} for cor in cores: if cor not in cor_dict: cor_dict[cor] = 0 cor_dict[cor] += 1 out: {'verde': 3, 'azul': 2, 'amarelo': 1} cor_dict = {} for cor in cores: cor_dict[cor] = cor_dict.get(cor,0) + 1 cor_dict = defaultdict(int) for cor in cores: cor_dict[cor] += 1

Slide 35

Slide 35 text

Agrupando com dicionários nomes = ["andre", "eduardo", "judite", "juan", "ana", "lua", "lugao", "paty", "fabio", "ciro"] d = {} for nome in nomes: key = len(nome) if key not in d: d[key] = [] d[key].append(nome) {5: ['andre', 'lugao', 'fabio'], 7: ['eduardo'], 6: ['judite'], 4: ['juan', 'paty', 'ciro'], 3: ['ana', 'lua']}

Slide 36

Slide 36 text

Agrupando com dicionários nomes = ["andre", "eduardo", "judite", "juan", "ana", "lua", "lugao", "paty", "fabio", "ciro"] d = {} for nome in nomes: key = len(nome) d.setdefault(key, []).append(nome)

Slide 37

Slide 37 text

Agrupando com dicionários nomes = ["andre", "eduardo", "judite", "juan", "ana", "lua", "lugao", "paty", "fabio", "ciro"] d = {} for nome in nomes: key = len(nome) d.setdefault(key, []).append(nome) d = defaultdict(list) for nome in nomes: key = len(name) d[key].append(name)

Slide 38

Slide 38 text

Melhorando a Clareza ● Argumentos posicionais e índices são legais ● Keywords e nomes são melhor ● O primeiro é conveniente para o computador ● O segundo é mais humano

Slide 39

Slide 39 text

Melhorando a Clareza capturar_entradas(“andresmachado”, False, 20, True)

Slide 40

Slide 40 text

Melhorando a Clareza capturar_entradas(“andresmachado”, False, 20, True) capturar_entradas( “andresmachado”, paginado=False, limite=20, processadas=True )

Slide 41

Slide 41 text

Melhore a clareza retornando tuplas nomeadas Test.test_result() (0, 4)

Slide 42

Slide 42 text

Melhore a clareza retornando tuplas nomeadas Test.test_result() (0, 4) Test.test_result() TestResults(failed=0, passed=4) TestResults = namedtuple(‘TestResults’, [‘failed’, ‘passed’])

Slide 43

Slide 43 text

Manipulando arquivos f = open(‘data.txt’) try: data = f.read() finally: f.close()

Slide 44

Slide 44 text

Manipulando arquivos f = open(‘data.txt’) try: data = f.read() finally: f.close() with open(‘data.txt’) as f: data = f.read()

Slide 45

Slide 45 text

Bibliografia https://www.youtube.com/watch?v=OSGv2VnC0go&list=PLpfRprRA1ZnOmcKKcDhILIGt-eNrijY6H&t=788s Bonus: https://www.youtube.com/watch?v=wf-BqAjZb8M https://twitter.com/raymondh

Slide 46

Slide 46 text

FIM