SlideShare una empresa de Scribd logo
1 de 40
Descargar para leer sin conexión
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)
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
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
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
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
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
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
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 = 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
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
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
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
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
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
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
"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
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
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
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
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
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 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
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
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
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
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
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
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
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
Bibliotecas Gráficas
PyQT
TKinter
Kivy
Lianja
None file:///Users/brunobemfica/Documents/dojos/dojo_python_w...
33 of 40 04/03/15 01:36
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
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
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
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
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
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

Más contenido relacionado

La actualidad más candente

Python - Guia de bolso
Python - Guia de bolsoPython - Guia de bolso
Python - Guia de bolsoJean Lopes
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonAlvaro Oliveira
 
Apresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonApresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonPriscila Mayumi
 
Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonGiancarlo Silva
 
Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsHelio Colombe
 
Postgresql + Python = Power!
Postgresql + Python = Power!Postgresql + Python = Power!
Postgresql + Python = Power!Juliano Atanazio
 
Python: programação divertida novamente
Python: programação divertida novamentePython: programação divertida novamente
Python: programação divertida novamenteRodrigo Amaral
 
PHP não é coisa de moleque
PHP não é coisa de molequePHP não é coisa de moleque
PHP não é coisa de molequeVagner Rodrigues
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na práticaRafael Cassau
 
Introdução à linguagem de programação Python
Introdução à linguagem de programação PythonIntrodução à linguagem de programação Python
Introdução à linguagem de programação PythonCarlos Schults
 
Matando o Java e Mostrando o Python
Matando o Java e Mostrando o PythonMatando o Java e Mostrando o Python
Matando o Java e Mostrando o PythonOsvaldo Santana Neto
 
Python e tipagem estática
Python e tipagem estáticaPython e tipagem estática
Python e tipagem estáticaVinta Software
 
Python No Terra (2006-12-21)
Python No Terra  (2006-12-21)Python No Terra  (2006-12-21)
Python No Terra (2006-12-21)Rudá Moura
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em pythonAlvaro Oliveira
 

La actualidad más candente (19)

Python - Guia de bolso
Python - Guia de bolsoPython - Guia de bolso
Python - Guia de bolso
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a Python
 
Python - Introdução
Python - IntroduçãoPython - Introdução
Python - Introdução
 
Programando com Python
Programando com PythonProgramando com Python
Programando com Python
 
Apresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonApresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação Python
 
Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com Python
 
Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - Português
 
Postgresql + Python = Power!
Postgresql + Python = Power!Postgresql + Python = Power!
Postgresql + Python = Power!
 
Python: programação divertida novamente
Python: programação divertida novamentePython: programação divertida novamente
Python: programação divertida novamente
 
Curso de Python e Django
Curso de Python e DjangoCurso de Python e Django
Curso de Python e Django
 
PHP não é coisa de moleque
PHP não é coisa de molequePHP não é coisa de moleque
PHP não é coisa de moleque
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na prática
 
Introdução à linguagem de programação Python
Introdução à linguagem de programação PythonIntrodução à linguagem de programação Python
Introdução à linguagem de programação Python
 
Matando o Java e Mostrando o Python
Matando o Java e Mostrando o PythonMatando o Java e Mostrando o Python
Matando o Java e Mostrando o Python
 
Python e tipagem estática
Python e tipagem estáticaPython e tipagem estática
Python e tipagem estática
 
Python No Terra (2006-12-21)
Python No Terra  (2006-12-21)Python No Terra  (2006-12-21)
Python No Terra (2006-12-21)
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 
Mini Curso Python
Mini Curso PythonMini Curso Python
Mini Curso Python
 

Similar a Dojo de Python

Por que Python? Vamos Conhecer? Vamos Aprender?
Por que Python? Vamos Conhecer? Vamos Aprender?Por que Python? Vamos Conhecer? Vamos Aprender?
Por que Python? Vamos Conhecer? Vamos Aprender?Juliano Atanazio
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação PythonJunior Sobrenome
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 pythonTiago
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Flávio Ribeiro
 
Análise de malware com software livre
Análise de malware com software livreAnálise de malware com software livre
Análise de malware com software livreDiego Santos
 
Introdução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlowIntrodução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlowpichiliani
 
Introdução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlowIntrodução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlowMauro Pichiliani
 
Python Training #1, ed. 6
Python Training #1, ed. 6Python Training #1, ed. 6
Python Training #1, ed. 6Fabio Spanhol
 
Visual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuroVisual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuroRogério Moraes de Carvalho
 
Python Training #1 - ed5
Python Training #1 - ed5Python Training #1 - ed5
Python Training #1 - ed5Fabio Spanhol
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Pythonrodrigopex
 
Python Training #1 ed.6
Python Training #1 ed.6 Python Training #1 ed.6
Python Training #1 ed.6 Fabio Spanhol
 
Algoritmos e programacao_em_python
Algoritmos e programacao_em_pythonAlgoritmos e programacao_em_python
Algoritmos e programacao_em_pythonArtur Santos
 

Similar a Dojo de Python (20)

Por que Python? Vamos Conhecer? Vamos Aprender?
Por que Python? Vamos Conhecer? Vamos Aprender?Por que Python? Vamos Conhecer? Vamos Aprender?
Por que Python? Vamos Conhecer? Vamos Aprender?
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação Python
 
Calourada2010
Calourada2010Calourada2010
Calourada2010
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 python
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
 
Análise de malware com software livre
Análise de malware com software livreAnálise de malware com software livre
Análise de malware com software livre
 
Introdução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlowIntrodução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlow
 
Introdução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlowIntrodução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlow
 
apresentacao.pdf
apresentacao.pdfapresentacao.pdf
apresentacao.pdf
 
Python Training #1, ed. 6
Python Training #1, ed. 6Python Training #1, ed. 6
Python Training #1, ed. 6
 
Visual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuroVisual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuro
 
aula3_python.pptx
aula3_python.pptxaula3_python.pptx
aula3_python.pptx
 
Python Training #1 - ed5
Python Training #1 - ed5Python Training #1 - ed5
Python Training #1 - ed5
 
M2ti - Python Brasil
M2ti - Python BrasilM2ti - Python Brasil
M2ti - Python Brasil
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Python
 
Python Training #1 ed.6
Python Training #1 ed.6 Python Training #1 ed.6
Python Training #1 ed.6
 
Python-Fenalivre-Imed
Python-Fenalivre-ImedPython-Fenalivre-Imed
Python-Fenalivre-Imed
 
Python, CPython, Pythonico, Cython
Python, CPython, Pythonico, CythonPython, CPython, Pythonico, Cython
Python, CPython, Pythonico, Cython
 
OpenSolaris a Céu Aberto
OpenSolaris a Céu AbertoOpenSolaris a Céu Aberto
OpenSolaris a Céu Aberto
 
Algoritmos e programacao_em_python
Algoritmos e programacao_em_pythonAlgoritmos e programacao_em_python
Algoritmos e programacao_em_python
 

Último

Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuisKitota
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfSamaraLunas
 

Último (8)

Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 

Dojo de Python

  • 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. 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. 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. 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. 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. 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. 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. 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. 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. Iniciando a depressão None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 10 of 40 04/03/15 01:36
  • 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. 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. 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. 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. 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. 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. 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. 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. "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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  • 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. 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. 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. 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. 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. One more thing 1 import antigravity None file:///Users/brunobemfica/Documents/dojos/dojo_python_w... 39 of 40 04/03/15 01:36