irmão mais velho • Manauara morando em São Paulo desde março 2020 • Formado em Jornalismo, comecei a programar aos 26 anos na faculdade de Engenharia de Computação • Trabalho como desenvolvedor desde 2013 • Membro do PyNorte, fiz parte da comissão de candidatura de Manaus para sediar a Python Brasil 2021 2022 - será a primeira edição na Região Norte! • Estudo Python, GoLang, Microsserviços e Scrum Felipe Carvalho, 33 anos Desenvolvedor back-end
uma forma concisa de criar uma lista a partir de outra existente, usando as cláusulas for e if. • Geralmente são mais compactas e mais rápidas. É considerada a forma pythônica de gerar listas: O que é PEP? Python Enhancement Proposal são documentos que geralmente abordam novas funcionalidades da linguagem, propósitos, procedimentos ou ambiente. python.org/dev/peps/ new_list = [expression for item in lista]
refactor: num_list = [] for item in range(100): if item % 2 == 0: if item % 5 == 0: num_list.append(item) num_list = [item for item in range(100) if item % 2 == 0 if item % 5 == 0]
com o if else dentro da expressão: lista = [] for i in range(10): if i % 2 == 0: lista.append("Even") else: lista.append("Odd") lista = ["Even" if i % 2 == 0 else "Odd" for i in range(10)]
transposed = [] matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] for i in range(4): transposed_row = [] for row in matrix: transposed_row.append(row[i]) transposed.append(transposed_row) transposed = [[row[i] for row in matrix] for i in range(4)]
vários comparativos que mostram que List Comprehensions são mais rápidas que usar for com append(), pois além de lidar melhor com a memória, não ‘gastam’ tempo chamando o método append(). Este é um exemplo de benchmark: https://gist.github.com/StrikingLoo/202f7c6ffb88113e9fe8774c75d98a3d#file-performance_benchmarks-py
ser atribuídas em variáveis ou armazenadas estruturas de dados e podem ser passadas como parâmetro para outras funções. • Também são definidas como funções anônimas. • É uma característica forte do paradigma funcional, presente também em outras linguagens. A sintaxe conta com a palavra reservada lambda, variável vinculada (bound variable) e um corpo (body): lambda x: x*2
em funções declaradas com def lambda x, y, z: x + y + z # (1, 2, 3) lambda x, y, z=3: x + y + z # (1, 2) lambda x, y, z=3: x + y + z # (1, y=2) lambda *args: sum(args) # (1,2,3) lambda **kwargs: sum(kwargs.values()) # (one=1, two=2, three=3) lambda x, *, y=0, z=0: x + y + z # (1, y=2, z=3)
nomeadas? • Código mais conciso - usa apenas uma linha de código. • Dispensa a necessidade de incluir uma nova variável ao código. • Podem ser chamadas de forma imediata. • Retorna um valor automaticamente.
ainda é desconhecida para muitos desenvolvedores de python. • Sem um nome ou documentação, a única forma de saber o que elas fazem é analisando o código. • Aceitam apenas um estado, então não podemos realizar operações mais complexas. • A documentação oficial do Python incentiva a usar sempre funções nomeadas.
would give people my opinion that maintainable code is more important than clever code,” he said. “If I encountered clever code that was particularly cryptic, and I had to do some maintenance on it, I would probably rewrite it. So I led by example, and also by talking to other people.” Guido van Rossum em entrevista ao Blog do Dropbox, em 2019 https://blog.dropbox.com/topics/company/thank-you--guido