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 l...
"Características gramaticais, sintáticas e
estruturais de uma determinada linguagem"
"Uma forma comumente utilizada e ente...
Por que se importar com expressões
idiomáticas?
"Programas devem ser escritos para pessoas lerem, e apenas
incidentalmente...
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 co...
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 an...
O que significa testar a "veracidade" de um
valor.
True False
String não vazia String vazia
Número diferente de zero Númer...
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 = 'Saf...
Exemplo (iteração)
# BOM
pets = ['Dog', 'Cat', 'Hamster']
for pet in pets:
print('A', pet, 'can be very cute!')
# NÃO MUIT...
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...
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...
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 B...
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...
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 ...
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(...
10.E o mais algumas … !
● while True:
braak # polêmico
● Geradores e expressões geradoras
● Evite: from module import *
Pr...
''.join(['O','b','r','i','g','a','d','o'])
Upcoming SlideShare
Loading in …5
×

Expressões idiomáticas do python

614 views

Published on

O que são expressões idiomáticas, por que elas são importantes quando estamos programando em Python e 10 exemplos.

Published in: Software
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
614
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
7
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Expressões idiomáticas do python

  1. 1. Expressões idiomáticas do Python @xima
  2. 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. 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. 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.
  5. 5. 10 expressões
  6. 6. if __name__ == '__main__': 1. Faça scripts ao mesmo tempo "importáveis" e executáveis.
  7. 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. 8. 2.Teste a "veracidade" ou "falsidade" dos valores if x: if not x:
  9. 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. 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. 11. 3.Utilize "in" sempre que possível Contém: if x in items: Iteração: for x in items:
  12. 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. 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. 14. 4.Permute valores sem precisar de uma variável temporária a, b = b, a
  15. 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. 16. 5.Construa strings usando sequências ''.join(some_strings)
  17. 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. 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. 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. 20. 7.Enumere for i, item in enumerate(items): ...
  21. 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. 22. 8.Construa listas utilizando compreensão de lista [i * 3 for i in data if i > 10]
  23. 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. 24. 9.Crie dicionários a partir de chaves e valores com 'zip' d = dict(zip(keys, values))
  25. 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. 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)
  27. 27. ''.join(['O','b','r','i','g','a','d','o'])

×