Como se sentir deprimido ao programar em outras linguagens
None file:///Users/brunobemfica/Documents/dojos/dojo_python_w...
...
self.description
Bruno de Oliva Bemfica
Trabalho com TI há 14 anos (5 de infra, 9 de desenvolvimento)
Já trabalhei com C, J...
Um pouco de História
Lançada em 1991 por Guido Van Rossum
Interpretada ou compilada
Imperativa, orientada a objetos e stro...
Quem usa Python?
Google (spiders de busca, gmail, google groups, youtube)
Yahoo (yahoo groups)
Instagram
Dropbox
Pixar
NAS...
O Zen do Python, por Tim Peters
Bonito é melhor que feio.
Explícito é melhor que implícito.
Simples é melhor que complexo....
O Zen do Python
Erros nunca devem passar silenciosamente.
A menos que sejam explicitamente silenciados.
Diante da ambigüid...
Iniciando a depressão
Hello world em "C#"
None file:///Users/brunobemfica/Documents/dojos/dojo_python_w...
7 of 40 04/03/15 ...
Iniciando a depressão
Hello world em Java
None file:///Users/brunobemfica/Documents/dojos/dojo_python_w...
8 of 40 04/03/15 ...
Iniciando a depressão
Hello world em Python
None file:///Users/brunobemfica/Documents/dojos/dojo_python_w...
9 of 40 04/03/1...
Iniciando a depressão
None file:///Users/brunobemfica/Documents/dojos/dojo_python_w...
10 of 40 04/03/15 01:36
Palavras reservadas
-and -del -from -not -while
-as -elif -global -or -with
-assert -else -if -pass -yield
-break -except ...
Show me the code!
Pequenos exemplos de código
1 #identação define o bloco de código
2 numeros = [1,2,3,4,5,6,7,8,9]
3 for ...
Sintaxe amigável
1 #reparem na diferença das aspas entre as duas strings
2 nome = "Bruno"
3 sobrenome = 'Bemfica'
4 print(...
Iteráveis
Listas, dicionários e tuplas
1 lista = [1,2,3, 'Python', None, 3.14]
2
3 dicionario = {'a':1,'b':'Python','c':3....
Orientação a objetos
Métodos e classes
1 class MinhaClasse:
2 #o inicializador tem parâmetros opcionais
3 def __init__(sel...
Funções e argument unpacking
functions são métodos de escopo geral, definidos dentro de
módulos.
1 from datetime import dat...
args e kwargs
Python tem um jeito padrão de utilizar listas e dicionários como
parâmetros em funções/métodos
1 def funcao(...
Métodos em OO
Classes possuem métodos estáticos, de classe e de objetos
(exemplos em arquivo)
1 class MyClass:
2 def __ini...
"Multiplicidade" do Python
Python tem herança múltipla, atribuição múltipla e retorno múltiplo
1 class MinhaClasse(OutraCl...
Módulos e programação funcional
Python é uma linguagem multiparadigma e o funcional é parte
importantíssima disso
1 import...
Funções como objetos
Em python, tudo é objeto. Incluindo as funções, que são cidadãos de
primeira classe
1 def soma(a, b):...
Decorators
Decorators são funções que executam rotinas complementares à
função decorada
1 def pares_decorator(func):
2 def...
Builtin functions
Funções embutidas na biblioteca padrão que não precisam ser
importadas e fazem muitas, muitas coisas
1 a...
Quantas funções!Não tem um JavaDoc?
Usamos builtin functions!
Função dir()
Função help()
Exercício!
None file:///Users/brun...
Arquivos e filesystem
Trabalhar com arquivos e sistema de arquivos é muito fácil em
python
1 import os
2 print(os.getcwd())...
Callable
Função que checa se o argumento é "chamável"
1 class Teste():
2
3 def __init__(self,a):
4 self.a = a
5
6 def soma...
getattr e setattr
getattr: Função que obtém o valor de um atributo de um objeto
setattr: Função que atribui um valor a um ...
List Comprehension
Sintaxe pythonica que facilita trabalhar com coleções. É um
construtor de processamento de listas
1 num...
Map, Reduce, Filter e Lambda
Funções builtin muito úteis para trabalho com coleções.
map: Mapeia uma função para cada vari...
Exemplos em lambda
1 #reduce
2 valores = [1, 2, 3, 4, 5]
3 print reduce(lambda x, y: x + y, valores)
4
5 #filter
6 valores...
Slicing de coleções
1 a[start:end] # Traz os itens do início ao fim
2 a[start:] # Traz o resto do array à partir de um pon...
Trabalhando com strings
1 #interpolação
2 nome, sobrenome, idade = "Bruno", 'Bemfica', 29
3 print "Me chamo %s %s e tenho ...
Bibliotecas Gráficas
PyQT
TKinter
Kivy
Lianja
None file:///Users/brunobemfica/Documents/dojos/dojo_python_w...
33 of 40 04/03...
Frameworks web
Tem para todos os gostos:
Pyramid
Bottle
Pylons
Django
TurboGears
Web2py
Flask
WebWare
CherryPy
Plone
None ...
IDEs para desenvolvimento
SublimeText2
TextMate
PyCharm
PyDev
Komodo IDE
Wing IDE
None file:///Users/brunobemfica/Documents/...
Aonde posso aprender mais?
Apostila do ark4n (http://ark4n.wordpress.com/python/)
Dive into python (http://www.diveintopyt...
Grupo de usuários de Python do RS
"Subgrupo" do MateHackers
Estamos no Bunker 360 (Av. Independência, 330 - Sala 206 - Por...
Contatos
Brunobemfica [@] gmail.com
www.brunobemfica.com
Github.com/brunocodeman
None file:///Users/brunobemfica/Documents/doj...
One more thing
1 import antigravity
None file:///Users/brunobemfica/Documents/dojos/dojo_python_w...
39 of 40 04/03/15 01:36
Obrigado!
None file:///Users/brunobemfica/Documents/dojos/dojo_python_w...
40 of 40 04/03/15 01:36
Próximos SlideShares
Carregando em…5
×

Dojo de Python

340 visualizações

Publicada em

Apresentação feita para introduzir Python a programadores de outras linguagens, mostrando alguns dos recursos da linguagem, programação funcional, orientação a objetos, list comprehensions, splicing, metaprogramação, dentre outras funcionalidades.

Código dos exercícios: https://github.com/BrunoCodeman/dojo_python

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
340
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
1
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Dojo de Python

  1. 1. Como se sentir deprimido ao programar em outras linguagens None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 1 of 40 04/03/15 01:36
  2. 2. self.description Bruno de Oliva Bemfica Trabalho com TI há 14 anos (5 de infra, 9 de desenvolvimento) Já trabalhei com C, Java, PHP, C#, VB.NET, Ruby e Python Agilista (se não é agile, não funciona para software) Fã de TDD, BDD, DDD, OMG, BBQ e todas essas siglas que ninguém entende Um dos membros fundadores do PyTchê (http://pytche-site.readthedocs.org/en/latest/) None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 2 of 40 04/03/15 01:36
  3. 3. Um pouco de História Lançada em 1991 por Guido Van Rossum Interpretada ou compilada Imperativa, orientada a objetos e strongly-typed Nome vem de Monty Python Mantida pela Python Software Foundation Possui um ZEN Possui PEPs (Python Enhancement Proposals) None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 3 of 40 04/03/15 01:36
  4. 4. Quem usa Python? Google (spiders de busca, gmail, google groups, youtube) Yahoo (yahoo groups) Instagram Dropbox Pixar NASA CIA FBI Apple Groupon Grupo Pão de Açúcar Pearson None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 4 of 40 04/03/15 01:36
  5. 5. O Zen do Python, por Tim Peters Bonito é melhor que feio. Explícito é melhor que implícito. Simples é melhor que complexo. Complexo é melhor que complicado. Linear é melhor do que aninhado. Esparso é melhor que denso. Legibilidade conta. Casos especiais não são especiais o bastante para quebrar as regras. Ainda que praticidade vença a pureza. None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 5 of 40 04/03/15 01:36
  6. 6. O Zen do Python Erros nunca devem passar silenciosamente. A menos que sejam explicitamente silenciados. Diante da ambigüidade, recuse a tentação de adivinhar. Deveria haver um — e preferencialmente só um — modo óbvio para fazer algo. Embora esse modo possa não ser óbvio a princípio a menos que você seja holandês. Agora é melhor que nunca. Embora nunca freqüentemente seja melhor que já. Se a implementação é difícil de explicar, é uma má idéia. Se a implementação é fácil de explicar, pode ser uma boa idéia. Namespaces são uma grande idéia — vamos ter mais dessas! None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 6 of 40 04/03/15 01:36
  7. 7. Iniciando a depressão Hello world em "C#" None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 7 of 40 04/03/15 01:36
  8. 8. Iniciando a depressão Hello world em Java None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 8 of 40 04/03/15 01:36
  9. 9. Iniciando a depressão Hello world em Python None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 9 of 40 04/03/15 01:36
  10. 10. Iniciando a depressão None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 10 of 40 04/03/15 01:36
  11. 11. Palavras reservadas -and -del -from -not -while -as -elif -global -or -with -assert -else -if -pass -yield -break -except -import -print -class -exec -in -raise -continue -finally -is -return -def -for -lambda -try None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 11 of 40 04/03/15 01:36
  12. 12. Show me the code! Pequenos exemplos de código 1 #identação define o bloco de código 2 numeros = [1,2,3,4,5,6,7,8,9] 3 for numero in numeros: 4 if numero % 2 == 0: 5 print 'o numero %i eh par' % numero 6 else: 7 print 'o numero %i eh impar' % numero 8 else: 9 print('lista vazia') 10 11 12 x = 1 13 while(x<10): 14 print(x) 15 x+=1 None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 12 of 40 04/03/15 01:36
  13. 13. Sintaxe amigável 1 #reparem na diferença das aspas entre as duas strings 2 nome = "Bruno" 3 sobrenome = 'Bemfica' 4 print(nome.__class__ is str and nome is not None) 5 print('olá') 6 7 string_vazia = '' 8 print('valor nulo' if string_vazia else 'string possui valor') None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 13 of 40 04/03/15 01:36
  14. 14. Iteráveis Listas, dicionários e tuplas 1 lista = [1,2,3, 'Python', None, 3.14] 2 3 dicionario = {'a':1,'b':'Python','c':3.14} 4 5 outro_dicionario=dict(a=1,b=2,c=3) 6 7 tupla = (4,5,6, '', None) 8 9 lista_sem_repeticao = set('ara ararauna')#strings também são iteráveis None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 14 of 40 04/03/15 01:36
  15. 15. Orientação a objetos Métodos e classes 1 class MinhaClasse: 2 #o inicializador tem parâmetros opcionais 3 def __init__(self,a=0,b=0): 4 self.a = a 5 self.b = b 6 def soma(a,b): 7 return a+b 8 def soma_propriedades(self): 9 return self.a + self.b 10 #Cadê os getters e seters? 11 12 class OutraClasse(MinhaClasse,object): 13 """ new style class com herança múltipla""" 14 pass None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 15 of 40 04/03/15 01:36
  16. 16. Funções e argument unpacking functions são métodos de escopo geral, definidos dentro de módulos. 1 from datetime import datetime as datahora 2 def que_horas_sao(): 3 data = datahora.now().date() 4 hora = datahora.now().time() 5 print('executando no dia %s, às %s horas' %(data, hora) 6 7 def somar(a, b, c): 8 return a + b + c 9 numeros = [1,2,3] 10 print somar(numeros) 11 #Exibe 6 12 outros_numeros = {'a':2, 'b':4 , 'c':6 } 13 print somar(**outros_numeros) 14 #Exibe 12 None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 16 of 40 04/03/15 01:36
  17. 17. args e kwargs Python tem um jeito padrão de utilizar listas e dicionários como parâmetros em funções/métodos 1 def funcao(*args): 2 #executa alguma mágica 3 4 def outra_funcao(**kwargs): 5 #executa outra mágica None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 17 of 40 04/03/15 01:36
  18. 18. Métodos em OO Classes possuem métodos estáticos, de classe e de objetos (exemplos em arquivo) 1 class MyClass: 2 def __init__(self, a, b): 3 self.a = a 4 self.b = b 5 #método protected 6 def _print_a(self): 7 print('a vale %s' %str(self.a)) 8 #método private 9 def __print_b(self): 10 print('b vale %s' %str(self.b)) 11 def method(self): 12 self._print_a() 13 self.__print_b() 14 @classmethod 15 def class_method(cls, a, b): 16 print(a + b) 17 @staticmethod 18 def static_method(a, b): 19 print(a + b) None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 18 of 40 04/03/15 01:36
  19. 19. "Multiplicidade" do Python Python tem herança múltipla, atribuição múltipla e retorno múltiplo 1 class MinhaClasse(OutraClasse,object): 2 pass 3 4 a, b = 1,2 5 6 def soma_e_multiplica(a, b): 7 soma = a + b 8 multiplica = a * b 9 return soma, multiplica None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 19 of 40 04/03/15 01:36
  20. 20. Módulos e programação funcional Python é uma linguagem multiparadigma e o funcional é parte importantíssima disso 1 import datetime as datahora #isto é um alias ao import 2 3 def data_hora(): 4 print('data e hora atual' % datahora.datetime.now()) 5 6 def data_hora_utc(): 7 print('data e hora UTC' % datahora.datetime.utcnow()) 8 9 if __name__ == '__main__': 10 data_hora() 11 data_hora_utc() None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 20 of 40 04/03/15 01:36
  21. 21. Funções como objetos Em python, tudo é objeto. Incluindo as funções, que são cidadãos de primeira classe 1 def soma(a, b): 2 return a+b 3 4 soma(1,2) 5 soma.__call__(1,2) 6 #ambos exibem 3 7 type(soma) 8 #<type 'function'> None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 21 of 40 04/03/15 01:36
  22. 22. Decorators Decorators são funções que executam rotinas complementares à função decorada 1 def pares_decorator(func): 2 def checa_pares(a, b): 3 if a % 2 == 0 and b % 2 == 0: 4 return a+b 5 else: 6 return 'os parâmetros não são pares' 7 return checa_pares 8 9 @pares_decorator 10 def soma(a, b): 11 return a+b 12 13 if __name__ == '__main__': 14 print soma(2,4) 15 #exibe 6 16 print soma(2,3) 17 # exibe a mensagem Exercício! None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 22 of 40 04/03/15 01:36
  23. 23. Builtin functions Funções embutidas na biblioteca padrão que não precisam ser importadas e fazem muitas, muitas coisas 1 abs() divmod() input() open() staticmethod() 2 all() enumerate() int() ord() str() 3 any() eval() isinstance() pow() sum() 4 basestring() execfile() issubclass() print() super() 5 bin() file() iter() property() tuple() 6 bool() filter() len() range() type() 7 bytearray() float() list() raw_input() unichr() 8 callable() format() locals() reduce() unicode() 9 chr() frozenset() long() reload() vars() 10 classmethod() getattr() map() repr() xrange() 11 cmp() globals() max() reversed() zip() 12 compile() hasattr() memoryview() round() __import__() 13 complex() hash() min() set() apply() 14 delattr() help() next() setattr() buffer() 15 dict() hex() object() slice() coerce() 16 dir() id() oct() sorted() intern() None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 23 of 40 04/03/15 01:36
  24. 24. Quantas funções!Não tem um JavaDoc? Usamos builtin functions! Função dir() Função help() Exercício! None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 24 of 40 04/03/15 01:36
  25. 25. Arquivos e filesystem Trabalhar com arquivos e sistema de arquivos é muito fácil em python 1 import os 2 print(os.getcwd()) #exibe o caminho do diretório atual 3 os.system('ifconfig') 4 arquivo = open('arquivo.txt','w') 5 arquivo.write('Arquivo escrito em python') 6 arquivo.close() Exercício! None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 25 of 40 04/03/15 01:36
  26. 26. Callable Função que checa se o argumento é "chamável" 1 class Teste(): 2 3 def __init__(self,a): 4 self.a = a 5 6 def soma(self,z): 7 return self.a + z 8 9 x = Teste(1) 10 callable(x.a) 11 #retorna False 12 callable(x.soma) 13 #retorna True None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 26 of 40 04/03/15 01:36
  27. 27. getattr e setattr getattr: Função que obtém o valor de um atributo de um objeto setattr: Função que atribui um valor a um atributo de um objeto 1 class Teste(): 2 3 def __init__(self,a): 4 self.a = a 5 6 def soma(self,z): 7 return self.a + z 8 9 x = Teste('dojo de python') 10 atributo = getattr(x, 'a') 11 print(atributo) 12 #exibe 'dojo de python' 13 setattr(x, 'a', 'novo valor') 14 print(atributo) 15 #exibe 'novo valor' None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 27 of 40 04/03/15 01:36
  28. 28. List Comprehension Sintaxe pythonica que facilita trabalhar com coleções. É um construtor de processamento de listas 1 numeros = range(10) 2 print [numero for numero in numeros] 3 4 lista = range(100) 5 lista_ao_quadrado = [x for x in L if x**2 > 3] Exercício None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 28 of 40 04/03/15 01:36
  29. 29. Map, Reduce, Filter e Lambda Funções builtin muito úteis para trabalho com coleções. map: Mapeia uma função para cada variável da coleção reduce: Aplica uma função à coleção, como um todo filter: Filtra os elementos de uma lista lambda: Função anônima para executar pequenas instruções de código Exercício! None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 29 of 40 04/03/15 01:36
  30. 30. Exemplos em lambda 1 #reduce 2 valores = [1, 2, 3, 4, 5] 3 print reduce(lambda x, y: x + y, valores) 4 5 #filter 6 valores_filter = [10, 4, -1, 3, 5, -9, -11] 7 print filter(lambda x: x > 0, valores_filter) Exercício None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 30 of 40 04/03/15 01:36
  31. 31. Slicing de coleções 1 a[start:end] # Traz os itens do início ao fim 2 a[start:] # Traz o resto do array à partir de um ponto 3 a[:end] # Traz o array até um ponto 4 a[:] # Copia a lista 5 6 a[-1] # último item do array 7 a[-2:] # dois últimos itens array 8 a[:-2] # tudo, exceto os dois últimos items 9 a[::-1] # Inverte o array None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 31 of 40 04/03/15 01:36
  32. 32. Trabalhando com strings 1 #interpolação 2 nome, sobrenome, idade = "Bruno", 'Bemfica', 29 3 print "Me chamo %s %s e tenho %i anos" % (nome, sobrenome, idade) 4 print("Meu sobrenome eh {0}".format(sobrenome)) 5 #multilinha 6 frase = 'Python eh simplesmente 7 magnifico e trabalhar com python 8 eh bem divertido 9 ' 10 #strip/lstrip/rstrip 11 frase = ' python eh muito legal ' 12 frase.strip() 13 #join 14 print ''.join(['C:','Users','Bruno' ]) 15 #isalnum 16 '1a2b3c4d5e'.isalnum() 17 #isdigit 18 '908'.isdigit() 19 #partition 20 print '123123'.partition('3') None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 32 of 40 04/03/15 01:36
  33. 33. Bibliotecas Gráficas PyQT TKinter Kivy Lianja None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 33 of 40 04/03/15 01:36
  34. 34. Frameworks web Tem para todos os gostos: Pyramid Bottle Pylons Django TurboGears Web2py Flask WebWare CherryPy Plone None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 34 of 40 04/03/15 01:36
  35. 35. IDEs para desenvolvimento SublimeText2 TextMate PyCharm PyDev Komodo IDE Wing IDE None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 35 of 40 04/03/15 01:36
  36. 36. Aonde posso aprender mais? Apostila do ark4n (http://ark4n.wordpress.com/python/) Dive into python (http://www.diveintopython.net/) Mutirão PyCursos (vídeos no Youtube) Python para zumbis (Curso do Fernando Masanori) Vídeos do google sobre Blog do Vinicius "Ban" Assef (http://aprenda- python.blogspot.com.br/) Site do Sérgio Berlotto (http://www.pythonrs.org/) None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 36 of 40 04/03/15 01:36
  37. 37. Grupo de usuários de Python do RS "Subgrupo" do MateHackers Estamos no Bunker 360 (Av. Independência, 330 - Sala 206 - Porto Alegre/RS) Encontros semanais (Quintas-feiras, 19:30) http://pytche-site.readthedocs.org/en/latest/ None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 37 of 40 04/03/15 01:36
  38. 38. Contatos Brunobemfica [@] gmail.com www.brunobemfica.com Github.com/brunocodeman None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 38 of 40 04/03/15 01:36
  39. 39. One more thing 1 import antigravity None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 39 of 40 04/03/15 01:36
  40. 40. Obrigado! None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 40 of 40 04/03/15 01:36

×