• Like
Expressões idiomáticas do python
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Expressões idiomáticas do python

  • 188 views
Published

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

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
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
188
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
3
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Expressões idiomáticas do Python @xima
  • 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.
  • 5. 10 expressões
  • 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)
  • 27. ''.join(['O','b','r','i','g','a','d','o'])