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 (20)

Text clustering
Text clusteringText clustering
Text clustering
 
2. python basic syntax
2. python   basic syntax2. python   basic syntax
2. python basic syntax
 
Assessment methodology and approach
Assessment methodology and approachAssessment methodology and approach
Assessment methodology and approach
 
Object Oriented Programming using C++ - Part 4
Object Oriented Programming using C++ - Part 4Object Oriented Programming using C++ - Part 4
Object Oriented Programming using C++ - Part 4
 
K means clustering
K means clusteringK means clustering
K means clustering
 
Breadth - First - Search
Breadth - First - SearchBreadth - First - Search
Breadth - First - Search
 
Python libraries
Python librariesPython libraries
Python libraries
 
Python numbers
Python numbersPython numbers
Python numbers
 
Bayesian learning
Bayesian learningBayesian learning
Bayesian learning
 
Php cheat sheet
Php cheat sheetPhp cheat sheet
Php cheat sheet
 
Data Science - Part VII - Cluster Analysis
Data Science - Part VII -  Cluster AnalysisData Science - Part VII -  Cluster Analysis
Data Science - Part VII - Cluster Analysis
 
Machine learning dan data mining
Machine learning dan data miningMachine learning dan data mining
Machine learning dan data mining
 
interface with mysql.pptx
interface with mysql.pptxinterface with mysql.pptx
interface with mysql.pptx
 
POO - 16 - Polimorfismo
POO - 16 - PolimorfismoPOO - 16 - Polimorfismo
POO - 16 - Polimorfismo
 
What's New in Python 3.10?
What's New in Python 3.10?What's New in Python 3.10?
What's New in Python 3.10?
 
Dempster Shafer Theory AI CSE 8th Sem
Dempster Shafer Theory AI CSE 8th SemDempster Shafer Theory AI CSE 8th Sem
Dempster Shafer Theory AI CSE 8th Sem
 
Genetic algorithms
Genetic algorithmsGenetic algorithms
Genetic algorithms
 
Python : Functions
Python : FunctionsPython : Functions
Python : Functions
 
Presentation Fuzzy
Presentation FuzzyPresentation Fuzzy
Presentation Fuzzy
 
Cheat sheets for AI
Cheat sheets for AICheat sheets for AI
Cheat sheets for AI
 

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)