View
82
Download
2
Category
Preview:
Citation preview
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
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
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
Quem usa Python?Google (spiders de busca, gmail, google groups, youtube)
Yahoo (yahoo groups)
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
O Zen do Python, por Tim PetersBonito é 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
O Zen do PythonErros 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
Iniciando a depressãoHello world em "C#"
None file:///Users/brunobemfica/Documents/dojos/dojo_python_w...
7 of 40 04/03/15 01:36
Iniciando a depressãoHello world em Java
None file:///Users/brunobemfica/Documents/dojos/dojo_python_w...
8 of 40 04/03/15 01:36
Iniciando a depressãoHello world em Python
None file:///Users/brunobemfica/Documents/dojos/dojo_python_w...
9 of 40 04/03/15 01:36
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 -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
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 = 113 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
Sintaxe amigável1 #reparem na diferença das aspas entre as duas strings2 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
IteráveisListas, dicionários e tuplas1 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
Orientação a objetosMé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.b10 #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
Funções e argument unpackingfunctions são métodos de escopo geral, definidos dentro demó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 612 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
args e kwargsPython tem um jeito padrão de utilizar listas e dicionários comoparâmetros em funções/métodos1 def funcao(*args):2 #executa alguma mágica3 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
Métodos em OOClasses 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 @classmethod15 def class_method(cls, a, b):16 print(a + b)17 @staticmethod18 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
"Multiplicidade" do PythonPython tem herança múltipla, atribuição múltipla e retorno múltiplo1 class MinhaClasse(OutraClasse,object):2 pass3 4 a, b = 1,25 6 def soma_e_multiplica(a, b):7 soma = a + b8 multiplica = a * b9 return soma, multiplica
None file:///Users/brunobemfica/Documents/dojos/dojo_python_w...
19 of 40 04/03/15 01:36
Módulos e programação funcionalPython é uma linguagem multiparadigma e o funcional é parteimportantí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
Funções como objetosEm python, tudo é objeto. Incluindo as funções, que são cidadãos deprimeira classe1 def soma(a, b):2 return a+b3 4 soma(1,2)5 soma.__call__(1,2)6 #ambos exibem 37 type(soma)8 #<type 'function'>
None file:///Users/brunobemfica/Documents/dojos/dojo_python_w...
21 of 40 04/03/15 01:36
DecoratorsDecorators 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_decorator10 def soma(a, b):11 return a+b12 13 if __name__ == '__main__':14 print soma(2,4)15 #exibe 616 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
Builtin functionsFunções embutidas na biblioteca padrão que não precisam serimportadas 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
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
Arquivos e filesystemTrabalhar com arquivos e sistema de arquivos é muito fácil empython1 import os2 print(os.getcwd()) #exibe o caminho do diretório atual3 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
CallableFunçã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 False12 callable(x.soma)13 #retorna True
None file:///Users/brunobemfica/Documents/dojos/dojo_python_w...
26 of 40 04/03/15 01:36
getattr e setattrgetattr: Função que obtém o valor de um atributo de um objetosetattr: 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
List ComprehensionSintaxe pythonica que facilita trabalhar com coleções. É umconstrutor de processamento de listas1 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
Map, Reduce, Filter e LambdaFunçõ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
Exemplos em lambda1 #reduce2 valores = [1, 2, 3, 4, 5]3 print reduce(lambda x, y: x + y, valores)4 5 #filter6 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
Slicing de coleções1 a[start:end] # Traz os itens do início ao fim2 a[start:] # Traz o resto do array à partir de um ponto3 a[:end] # Traz o array até um ponto4 a[:] # Copia a lista5 6 a[-1] # último item do array7 a[-2:] # dois últimos itens array8 a[:-2] # tudo, exceto os dois últimos items9 a[::-1] # Inverte o array
None file:///Users/brunobemfica/Documents/dojos/dojo_python_w...
31 of 40 04/03/15 01:36
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 #join14 print '\\'.join(['C:','Users','Bruno' ])15 #isalnum16 '1a2b3c4d5e'.isalnum()17 #isdigit18 '908'.isdigit()19 #partition20 print '123123'.partition('3')
None file:///Users/brunobemfica/Documents/dojos/dojo_python_w...
32 of 40 04/03/15 01:36
Bibliotecas GráficasPyQTTKinterKivyLianja
None file:///Users/brunobemfica/Documents/dojos/dojo_python_w...
33 of 40 04/03/15 01:36
Frameworks webTem 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
IDEs para desenvolvimentoSublimeText2TextMatePyCharmPyDevKomodo IDEWing IDE
None file:///Users/brunobemfica/Documents/dojos/dojo_python_w...
35 of 40 04/03/15 01: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 sobreBlog 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
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
ContatosBrunobemfica [@] gmail.comwww.brunobemfica.comGithub.com/brunocodeman
None file:///Users/brunobemfica/Documents/dojos/dojo_python_w...
38 of 40 04/03/15 01:36
One more thing1 import antigravity
None file:///Users/brunobemfica/Documents/dojos/dojo_python_w...
39 of 40 04/03/15 01:36
Recommended