SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
Expressões idiomáticas
do Python
@xima
Estes slides são uma tradução de outra apresentação.
Os slides originais não são de minha autoria e estão disponíveis no link:
http://safehammad.com/downloads/python-idioms-2014-01-16.pdf
"Características gramaticais, sintáticas e
estruturais de uma determinada linguagem"
"Uma forma comumente utilizada e entendida
de expressar um fato, ideia ou intenção"
O que são expressões idiomáticas?
Por que se importar com expressões
idiomáticas?
"Programas devem ser escritos para pessoas lerem, e apenas
incidentalmente para máquinas executarem"
- Abelson & Sussman, SICP
"Deve existir uma - e preferênciamente apenas uma - forma óbivia de se
fazer"
- Tim Peters, The Zen of Python (PEP 20)
● A utilização de uma sintaxe ou construção de código comumente aceita, pode
ajudar na legibilidade e clareza.
● Algumas expressões idiomáticas podem ser mais rápidas ou utilizar menos
memória que suas versões não idiomáticas.
● Utilizar expressões idiomáticas podem tornar seu código mais pythonico.
10 expressões
if __name__ == '__main__':
1. Faça scripts ao mesmo tempo
"importáveis" e executáveis.
Exemplo
def main():
print('Fazendo algo no módulo', __name__)
if __name__ == '__main__':
print('Executado pela linha de comando')
main()
$ python mymodule.py
Executado pela linha de comando
Fazendo algo no módulo __main__
>>> import mymodule
>>> mymodule.main()
Doing stuff in module mymodule
2.Teste a "veracidade" ou "falsidade" dos
valores
if x:
if not x:
Exemplo
# BOM
name = 'Safe'
pets = ['Dog', 'Cat', 'Hamster']
owners = {'Safe': 'Cat', 'George': 'Dog'}
if name and pets and owners:
print('We have pets!')
# NÃO MUITO BOM
if name != '' and len(pets) > 0 and owners != {}:
print('We have pets!')
● Verificar a veracidade não atrela a expressão condicional ao tipo do objeto sendo
verificado.
● Verificar a veracidade mostra claramente a intenção do código ao invés de desviar o foco
para uma saida específica.
O que significa testar a "veracidade" de um
valor.
True False
String não vazia String vazia
Número diferente de zero Número 0
Lista não vazia: len(x) > 0 Lista vazia: len(x) == 0
- None
True False
__nonzero__ (2.x) / __bool__ (3.x) __nonzero__ (2.x) / __bool__ (3.x)
3.Utilize "in" sempre que possível
Contém:
if x in items:
Iteração:
for x in items:
Exemplo (contém)
# BOM
name = 'Safe Hammad'
if 'H' in name:
print('This name has an H in it!')
# NÃO MUITO BOM
name = 'Safe Hammad'
if name.find('H') != -1:
print('This name has an H in it!')
● Utilizar 'in' para verificar se um item existe em uma sequência é claro e conciso.
● Pode ser utilizado em listas, dicionários (chaves), conjuntos (sets), strings e nas suas
próprias classes, basta implementar o método especial: '__contains__'.
Exemplo (iteração)
# BOM
pets = ['Dog', 'Cat', 'Hamster']
for pet in pets:
print('A', pet, 'can be very cute!')
# NÃO MUITO BOM
pets = ['Dog', 'Cat', 'Hamster'] i=0
while i < len(pets):
print('A', pets[i], 'can be very cute!')
i += 1
● Utilizar 'in' para iterar em uma sequência é claro e conciso.
● Pode ser utilizado em listas, dicionários (chaves), conjuntos (sets), strings, e nas suas
próprias classes, basta implementar o método especial: '__iter__'
4.Permute valores sem precisar de uma
variável temporária
a, b = b, a
Exemplo
# BOM
a, b = 5, 6
print(a, b) # 5, 6
a, b = b, a
print(a, b) # 6, 5
# NÃO MUITO BOM
a, b = 5, 6
print(a, b) # 5, 6
temp = a
a = b
b = temp
print(a, b) # 6, 5
● Evite poluir o código com variáveis temporárias que só serão utilizadas uma única vez.
5.Construa strings usando sequências
''.join(some_strings)
Exemplos
# BOM
chars = ['S', 'a', 'f', 'e']
name = ''.join(chars)
print(name) # Safe
# NÃO MUITO BOM
chars = ['S', 'a', 'f', 'e']
name = ''
for char in chars:
name += char
print(name) # Safe
● O método 'join' chamado em uma string e recebendo uma lista de strings como parâmetro, leva
tempo linear para executar.
● Somar repetidamente as strings leva tempo quadrádico.
6.MFPPP é preferível a OAT
"É Mais Fácil Pedir Perdão que Permissão."
"Olhe Antes de Tropeçar."
try: vs. if ...:
except:
Exemplo
# BOM
d = {'x': '5'}
try:
value = int(d['x'])
except (KeyError, TypeError, ValueError):
value = None
# NÃO MUITO BOM
d = {'x': '5'}
if 'x' in d and 
isinstance(d['x'], str) and 
d['x'].isdigit():
value = int(d['x'])
else:
value = None
● Levantar exceções em Python não é "custoso" com é em java por exemplo.
● Utilize "duck typing" os invés de ficar verificando valores.
7.Enumere
for i, item in enumerate(items):
...
Exemplo
# BOM
names = ['Safe', 'George', 'Mildred']
for i, name in enumerate(names):
print(i, name) # 0 Safe, 1 George etc.
# NÃO MUITO BOM
names = ['Safe', 'George', 'Mildred']
count = 0
for name in names:
print(i, name) # 0 Safe, 1 George etc.
count += 1
● Disponível desdo o Python 2.3
● Utilize o parâmetro 'start' do 'enumerate' que está disponível desdo o Python 2.6 para começar
em um número diferente de 0.
8.Construa listas utilizando compreensão
de lista
[i * 3 for i in data if i > 10]
Exemplo
# BOM
data = [7, 20, 3, 15, 11]
result = [i * 3 for i in data if i > 10]
print(result) # [60, 45, 33]
# NÃO MUITO BOM (QUASE SEMPRE)
data = [7, 20, 3, 15, 11]
result = []
for i in data:
if i > 10:
result.append(i * 3)
print(result) # [60, 45, 33]
● Sintaxe consisa.
● Tome cuidado para não sair do controle, nesse caso a segunda forma é melhor.
9.Crie dicionários a partir de chaves e
valores com 'zip'
d = dict(zip(keys, values))
Exemplo
# BOM
keys = ['Safe', 'Bob', 'Thomas']
values = ['Hammad', 'Builder', 'Engine']
d = dict(zip(keys, values))
print(d) # {'Bob': 'Builder',
# 'Safe': 'Hammad',
# 'Thomas': 'Engine'}
# NÃO MUITO BOM
keys = ['Safe', 'Bob', 'Thomas']
values = ['Hammad', 'Builder',
'Engine']
d = {}
for i, key in enumerate(keys):
d[keys] = values[i]
print(d) # {'Bob': 'Builder',
# 'Safe': 'Hammad',
# 'Thomas': 'Engine'}
● Existem diversas formas de se construir dicionários.
10.E o mais algumas … !
● while True:
braak # polêmico
● Geradores e expressões geradoras
● Evite: from module import *
Prefira: import numpy as np
● Utilize variáveis descartáveis:
for k, _ in [('a',1), ('b', 2), ('c', 3)]:
…
● dict.get() e dict.setdefault()
● collections.defaultdict
● Ordene listas utilizando: l.sort(key=key_funct)
''.join(['O','b','r','i','g','a','d','o'])

Mais conteúdo relacionado

Mais procurados

[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google Cloud[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google CloudPgDay.Seoul
 
MySQL User Camp: Multi-threaded Slaves
MySQL User Camp: Multi-threaded SlavesMySQL User Camp: Multi-threaded Slaves
MySQL User Camp: Multi-threaded SlavesShivji Kumar Jha
 
QThreads: Are You Using Them Wrong?
QThreads: Are You Using Them Wrong? QThreads: Are You Using Them Wrong?
QThreads: Are You Using Them Wrong? ICS
 
Postgres connections at scale
Postgres connections at scalePostgres connections at scale
Postgres connections at scaleMydbops
 
Cloud Native PostgreSQL
Cloud Native PostgreSQLCloud Native PostgreSQL
Cloud Native PostgreSQLEDB
 
Intel(r) Quick Assist Technology Overview
Intel(r) Quick Assist Technology OverviewIntel(r) Quick Assist Technology Overview
Intel(r) Quick Assist Technology OverviewMichelle Holley
 
Introduction VAUUM, Freezing, XID wraparound
Introduction VAUUM, Freezing, XID wraparoundIntroduction VAUUM, Freezing, XID wraparound
Introduction VAUUM, Freezing, XID wraparoundMasahiko Sawada
 
[Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자
[Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자[Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자
[Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자PgDay.Seoul
 
Json in Postgres - the Roadmap
 Json in Postgres - the Roadmap Json in Postgres - the Roadmap
Json in Postgres - the RoadmapEDB
 
Designing Data-Intensive Applications_ The Big Ideas Behind Reliable, Scalabl...
Designing Data-Intensive Applications_ The Big Ideas Behind Reliable, Scalabl...Designing Data-Intensive Applications_ The Big Ideas Behind Reliable, Scalabl...
Designing Data-Intensive Applications_ The Big Ideas Behind Reliable, Scalabl...SindhuVasireddy1
 
Backup+e+archiving+na+nuvem+aws+ +ricardo+geh
Backup+e+archiving+na+nuvem+aws+ +ricardo+gehBackup+e+archiving+na+nuvem+aws+ +ricardo+geh
Backup+e+archiving+na+nuvem+aws+ +ricardo+gehAmazon Web Services LATAM
 
CartoDB Inside Out
CartoDB Inside OutCartoDB Inside Out
CartoDB Inside OutJorge Sanz
 
Introduction to Testcontainers
Introduction to TestcontainersIntroduction to Testcontainers
Introduction to TestcontainersVMware Tanzu
 
MariaDB Other Features
MariaDB Other FeaturesMariaDB Other Features
MariaDB Other FeaturesJongJin Lee
 
NATS vs HTTP
NATS vs HTTPNATS vs HTTP
NATS vs HTTPApcera
 
Apache Cassandra - Base de datos
Apache Cassandra - Base de datosApache Cassandra - Base de datos
Apache Cassandra - Base de datosZteeven Zalinas
 
Prometheus – Storage
Prometheus – StoragePrometheus – Storage
Prometheus – Storagefabxc
 

Mais procurados (20)

[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google Cloud[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google Cloud
 
MySQL User Camp: Multi-threaded Slaves
MySQL User Camp: Multi-threaded SlavesMySQL User Camp: Multi-threaded Slaves
MySQL User Camp: Multi-threaded Slaves
 
QThreads: Are You Using Them Wrong?
QThreads: Are You Using Them Wrong? QThreads: Are You Using Them Wrong?
QThreads: Are You Using Them Wrong?
 
Postgres connections at scale
Postgres connections at scalePostgres connections at scale
Postgres connections at scale
 
Cloud Native PostgreSQL
Cloud Native PostgreSQLCloud Native PostgreSQL
Cloud Native PostgreSQL
 
Intel(r) Quick Assist Technology Overview
Intel(r) Quick Assist Technology OverviewIntel(r) Quick Assist Technology Overview
Intel(r) Quick Assist Technology Overview
 
Triggers no SQL Server
Triggers no SQL ServerTriggers no SQL Server
Triggers no SQL Server
 
Introduction VAUUM, Freezing, XID wraparound
Introduction VAUUM, Freezing, XID wraparoundIntroduction VAUUM, Freezing, XID wraparound
Introduction VAUUM, Freezing, XID wraparound
 
[Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자
[Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자[Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자
[Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자
 
Json in Postgres - the Roadmap
 Json in Postgres - the Roadmap Json in Postgres - the Roadmap
Json in Postgres - the Roadmap
 
Designing Data-Intensive Applications_ The Big Ideas Behind Reliable, Scalabl...
Designing Data-Intensive Applications_ The Big Ideas Behind Reliable, Scalabl...Designing Data-Intensive Applications_ The Big Ideas Behind Reliable, Scalabl...
Designing Data-Intensive Applications_ The Big Ideas Behind Reliable, Scalabl...
 
Backup+e+archiving+na+nuvem+aws+ +ricardo+geh
Backup+e+archiving+na+nuvem+aws+ +ricardo+gehBackup+e+archiving+na+nuvem+aws+ +ricardo+geh
Backup+e+archiving+na+nuvem+aws+ +ricardo+geh
 
CartoDB Inside Out
CartoDB Inside OutCartoDB Inside Out
CartoDB Inside Out
 
Introduction to Testcontainers
Introduction to TestcontainersIntroduction to Testcontainers
Introduction to Testcontainers
 
MariaDB Other Features
MariaDB Other FeaturesMariaDB Other Features
MariaDB Other Features
 
NATS vs HTTP
NATS vs HTTPNATS vs HTTP
NATS vs HTTP
 
Mule batch job
Mule batch jobMule batch job
Mule batch job
 
Apache Cassandra - Base de datos
Apache Cassandra - Base de datosApache Cassandra - Base de datos
Apache Cassandra - Base de datos
 
Prometheus – Storage
Prometheus – StoragePrometheus – Storage
Prometheus – Storage
 
Hazelcast Introduction
Hazelcast IntroductionHazelcast Introduction
Hazelcast Introduction
 

Semelhante a Expressões idiomáticas do python

Semelhante a Expressões idiomáticas do python (20)

Comandos em python
Comandos em pythonComandos em python
Comandos em python
 
Clean Code
Clean CodeClean Code
Clean Code
 
Python2.5.ppt
Python2.5.pptPython2.5.ppt
Python2.5.ppt
 
Python introdução a linguagem de programação
Python introdução a linguagem de programaçãoPython introdução a linguagem de programação
Python introdução a linguagem de programação
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
 
Linguagem C clecioamerico
Linguagem C clecioamericoLinguagem C clecioamerico
Linguagem C clecioamerico
 
Python 02
Python 02Python 02
Python 02
 
Fascículo1java
Fascículo1javaFascículo1java
Fascículo1java
 
Logica de Programacao
Logica de ProgramacaoLogica de Programacao
Logica de Programacao
 
Resumo computação I
Resumo computação IResumo computação I
Resumo computação I
 
Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao ruby
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
Python_2018-03-02-MC102KLMN-Aula02.pdf
Python_2018-03-02-MC102KLMN-Aula02.pdfPython_2018-03-02-MC102KLMN-Aula02.pdf
Python_2018-03-02-MC102KLMN-Aula02.pdf
 
Android - Dicas de Performance
Android - Dicas de PerformanceAndroid - Dicas de Performance
Android - Dicas de Performance
 
Linguagem em c
Linguagem em cLinguagem em c
Linguagem em c
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
Linguagem C 09 Ponteiros
Linguagem C 09 PonteirosLinguagem C 09 Ponteiros
Linguagem C 09 Ponteiros
 
Testes de Sofware
Testes de SofwareTestes de Sofware
Testes de Sofware
 
Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#
 

Mais de Filipe Ximenes

Multitenant applications: How and Why
Multitenant applications: How and WhyMultitenant applications: How and Why
Multitenant applications: How and WhyFilipe Ximenes
 
Tasks: you gotta know how to run them
Tasks: you gotta know how to run themTasks: you gotta know how to run them
Tasks: you gotta know how to run themFilipe Ximenes
 
[Quase] Tudo que você precisa saber sobre tarefas assíncronas
[Quase] Tudo que você precisa saber sobre  tarefas assíncronas[Quase] Tudo que você precisa saber sobre  tarefas assíncronas
[Quase] Tudo que você precisa saber sobre tarefas assíncronasFilipe Ximenes
 
O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]Filipe Ximenes
 
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]Filipe Ximenes
 
Usando tapioca para acessar APIs web [PyBR11]
Usando tapioca para acessar APIs web [PyBR11]Usando tapioca para acessar APIs web [PyBR11]
Usando tapioca para acessar APIs web [PyBR11]Filipe Ximenes
 
Boas práticas de django
Boas práticas de djangoBoas práticas de django
Boas práticas de djangoFilipe Ximenes
 
Migrando do App Engine para o Heroku
Migrando do App Engine para o HerokuMigrando do App Engine para o Heroku
Migrando do App Engine para o HerokuFilipe Ximenes
 

Mais de Filipe Ximenes (8)

Multitenant applications: How and Why
Multitenant applications: How and WhyMultitenant applications: How and Why
Multitenant applications: How and Why
 
Tasks: you gotta know how to run them
Tasks: you gotta know how to run themTasks: you gotta know how to run them
Tasks: you gotta know how to run them
 
[Quase] Tudo que você precisa saber sobre tarefas assíncronas
[Quase] Tudo que você precisa saber sobre  tarefas assíncronas[Quase] Tudo que você precisa saber sobre  tarefas assíncronas
[Quase] Tudo que você precisa saber sobre tarefas assíncronas
 
O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]
 
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
 
Usando tapioca para acessar APIs web [PyBR11]
Usando tapioca para acessar APIs web [PyBR11]Usando tapioca para acessar APIs web [PyBR11]
Usando tapioca para acessar APIs web [PyBR11]
 
Boas práticas de django
Boas práticas de djangoBoas práticas de django
Boas práticas de django
 
Migrando do App Engine para o Heroku
Migrando do App Engine para o HerokuMigrando do App Engine para o Heroku
Migrando do App Engine para o Heroku
 

Expressões idiomáticas do python

  • 2. Estes slides são uma tradução de outra apresentação. Os slides originais não são de minha autoria e estão disponíveis no link: http://safehammad.com/downloads/python-idioms-2014-01-16.pdf
  • 3. "Características gramaticais, sintáticas e estruturais de uma determinada linguagem" "Uma forma comumente utilizada e entendida de expressar um fato, ideia ou intenção" O que são expressões idiomáticas?
  • 4. Por que se importar com expressões idiomáticas? "Programas devem ser escritos para pessoas lerem, e apenas incidentalmente para máquinas executarem" - Abelson & Sussman, SICP "Deve existir uma - e preferênciamente apenas uma - forma óbivia de se fazer" - Tim Peters, The Zen of Python (PEP 20) ● A utilização de uma sintaxe ou construção de código comumente aceita, pode ajudar na legibilidade e clareza. ● Algumas expressões idiomáticas podem ser mais rápidas ou utilizar menos memória que suas versões não idiomáticas. ● Utilizar expressões idiomáticas podem tornar seu código mais pythonico.
  • 6. if __name__ == '__main__': 1. Faça scripts ao mesmo tempo "importáveis" e executáveis.
  • 7. Exemplo def main(): print('Fazendo algo no módulo', __name__) if __name__ == '__main__': print('Executado pela linha de comando') main() $ python mymodule.py Executado pela linha de comando Fazendo algo no módulo __main__ >>> import mymodule >>> mymodule.main() Doing stuff in module mymodule
  • 8. 2.Teste a "veracidade" ou "falsidade" dos valores if x: if not x:
  • 9. Exemplo # BOM name = 'Safe' pets = ['Dog', 'Cat', 'Hamster'] owners = {'Safe': 'Cat', 'George': 'Dog'} if name and pets and owners: print('We have pets!') # NÃO MUITO BOM if name != '' and len(pets) > 0 and owners != {}: print('We have pets!') ● Verificar a veracidade não atrela a expressão condicional ao tipo do objeto sendo verificado. ● Verificar a veracidade mostra claramente a intenção do código ao invés de desviar o foco para uma saida específica.
  • 10. O que significa testar a "veracidade" de um valor. True False String não vazia String vazia Número diferente de zero Número 0 Lista não vazia: len(x) > 0 Lista vazia: len(x) == 0 - None True False __nonzero__ (2.x) / __bool__ (3.x) __nonzero__ (2.x) / __bool__ (3.x)
  • 11. 3.Utilize "in" sempre que possível Contém: if x in items: Iteração: for x in items:
  • 12. Exemplo (contém) # BOM name = 'Safe Hammad' if 'H' in name: print('This name has an H in it!') # NÃO MUITO BOM name = 'Safe Hammad' if name.find('H') != -1: print('This name has an H in it!') ● Utilizar 'in' para verificar se um item existe em uma sequência é claro e conciso. ● Pode ser utilizado em listas, dicionários (chaves), conjuntos (sets), strings e nas suas próprias classes, basta implementar o método especial: '__contains__'.
  • 13. Exemplo (iteração) # BOM pets = ['Dog', 'Cat', 'Hamster'] for pet in pets: print('A', pet, 'can be very cute!') # NÃO MUITO BOM pets = ['Dog', 'Cat', 'Hamster'] i=0 while i < len(pets): print('A', pets[i], 'can be very cute!') i += 1 ● Utilizar 'in' para iterar em uma sequência é claro e conciso. ● Pode ser utilizado em listas, dicionários (chaves), conjuntos (sets), strings, e nas suas próprias classes, basta implementar o método especial: '__iter__'
  • 14. 4.Permute valores sem precisar de uma variável temporária a, b = b, a
  • 15. Exemplo # BOM a, b = 5, 6 print(a, b) # 5, 6 a, b = b, a print(a, b) # 6, 5 # NÃO MUITO BOM a, b = 5, 6 print(a, b) # 5, 6 temp = a a = b b = temp print(a, b) # 6, 5 ● Evite poluir o código com variáveis temporárias que só serão utilizadas uma única vez.
  • 16. 5.Construa strings usando sequências ''.join(some_strings)
  • 17. Exemplos # BOM chars = ['S', 'a', 'f', 'e'] name = ''.join(chars) print(name) # Safe # NÃO MUITO BOM chars = ['S', 'a', 'f', 'e'] name = '' for char in chars: name += char print(name) # Safe ● O método 'join' chamado em uma string e recebendo uma lista de strings como parâmetro, leva tempo linear para executar. ● Somar repetidamente as strings leva tempo quadrádico.
  • 18. 6.MFPPP é preferível a OAT "É Mais Fácil Pedir Perdão que Permissão." "Olhe Antes de Tropeçar." try: vs. if ...: except:
  • 19. Exemplo # BOM d = {'x': '5'} try: value = int(d['x']) except (KeyError, TypeError, ValueError): value = None # NÃO MUITO BOM d = {'x': '5'} if 'x' in d and isinstance(d['x'], str) and d['x'].isdigit(): value = int(d['x']) else: value = None ● Levantar exceções em Python não é "custoso" com é em java por exemplo. ● Utilize "duck typing" os invés de ficar verificando valores.
  • 20. 7.Enumere for i, item in enumerate(items): ...
  • 21. Exemplo # BOM names = ['Safe', 'George', 'Mildred'] for i, name in enumerate(names): print(i, name) # 0 Safe, 1 George etc. # NÃO MUITO BOM names = ['Safe', 'George', 'Mildred'] count = 0 for name in names: print(i, name) # 0 Safe, 1 George etc. count += 1 ● Disponível desdo o Python 2.3 ● Utilize o parâmetro 'start' do 'enumerate' que está disponível desdo o Python 2.6 para começar em um número diferente de 0.
  • 22. 8.Construa listas utilizando compreensão de lista [i * 3 for i in data if i > 10]
  • 23. Exemplo # BOM data = [7, 20, 3, 15, 11] result = [i * 3 for i in data if i > 10] print(result) # [60, 45, 33] # NÃO MUITO BOM (QUASE SEMPRE) data = [7, 20, 3, 15, 11] result = [] for i in data: if i > 10: result.append(i * 3) print(result) # [60, 45, 33] ● Sintaxe consisa. ● Tome cuidado para não sair do controle, nesse caso a segunda forma é melhor.
  • 24. 9.Crie dicionários a partir de chaves e valores com 'zip' d = dict(zip(keys, values))
  • 25. Exemplo # BOM keys = ['Safe', 'Bob', 'Thomas'] values = ['Hammad', 'Builder', 'Engine'] d = dict(zip(keys, values)) print(d) # {'Bob': 'Builder', # 'Safe': 'Hammad', # 'Thomas': 'Engine'} # NÃO MUITO BOM keys = ['Safe', 'Bob', 'Thomas'] values = ['Hammad', 'Builder', 'Engine'] d = {} for i, key in enumerate(keys): d[keys] = values[i] print(d) # {'Bob': 'Builder', # 'Safe': 'Hammad', # 'Thomas': 'Engine'} ● Existem diversas formas de se construir dicionários.
  • 26. 10.E o mais algumas … ! ● while True: braak # polêmico ● Geradores e expressões geradoras ● Evite: from module import * Prefira: import numpy as np ● Utilize variáveis descartáveis: for k, _ in [('a',1), ('b', 2), ('c', 3)]: … ● dict.get() e dict.setdefault() ● collections.defaultdict ● Ordene listas utilizando: l.sort(key=key_funct)