SlideShare uma empresa Scribd logo
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

Mais conteúdo relacionado

PDF
Conhencendo Python e por que ela importa?
PDF
Introdução à Programação em Python
PDF
Apostila C ANSI
PDF
Python - Programando em alto nível
PDF
Introdução à Programação Python e Tk
PPTX
2016/01/27 - Aprendendo a programar com Python
PDF
Introdução a Linguagem de Programação Python
PDF
Apresentação python fábio jr alves
Conhencendo Python e por que ela importa?
Introdução à Programação em Python
Apostila C ANSI
Python - Programando em alto nível
Introdução à Programação Python e Tk
2016/01/27 - Aprendendo a programar com Python
Introdução a Linguagem de Programação Python
Apresentação python fábio jr alves

Mais procurados (19)

PDF
Python - Guia de bolso
PDF
Programando para web com python - Introdução a Python
PDF
Python - Introdução
PDF
Programando com Python
PPT
Apresentando a Linguagem de Programação Python
PDF
Curso básico de Algoritmos com Python
PDF
Curso de Python (Básico) - Português
PDF
Postgresql + Python = Power!
ODP
Python: programação divertida novamente
PDF
Curso de Python e Django
PDF
PHP não é coisa de moleque
PDF
Introdução a linguagem Python
PDF
Python e django na prática
PDF
Introdução à linguagem de programação Python
ODP
Matando o Java e Mostrando o Python
PDF
Python e tipagem estática
PPT
Python No Terra (2006-12-21)
PDF
Introdução a estruturas de dados em python
ODP
Mini Curso Python
Python - Guia de bolso
Programando para web com python - Introdução a Python
Python - Introdução
Programando com Python
Apresentando a Linguagem de Programação Python
Curso básico de Algoritmos com Python
Curso de Python (Básico) - Português
Postgresql + Python = Power!
Python: programação divertida novamente
Curso de Python e Django
PHP não é coisa de moleque
Introdução a linguagem Python
Python e django na prática
Introdução à linguagem de programação Python
Matando o Java e Mostrando o Python
Python e tipagem estática
Python No Terra (2006-12-21)
Introdução a estruturas de dados em python
Mini Curso Python
Anúncio

Semelhante a Dojo de Python (20)

PDF
Introdução a linguagem Python 2.7
PDF
Orientação a objetos em Python (compacto)
ODP
Python Emsl2009
KEY
Introdução à Linguagem de programação Python
PDF
Trabalho sobre a linguagem Python
PDF
Py sintaxe
ODP
Python para desenvolvedores - material apoio (parte I)
PPT
Python2.5.ppt
PPTX
Palestra Apresentando Python e Suas Aplicações
ODP
Pymordida0 Semana de computação da SOCIESC - 2008/10
ODP
Meta-programacao em python
ODP
Mini Curso de Python para Coding Dojo
KEY
Introdução ao Python & Web Services
PPTX
Introdução a programação em python d2
PDF
Objetos Pythonicos - compacto
PDF
Python
ODP
Workshop Python.1
PDF
Iniciando em Python
PDF
Python: a primeira mordida
ODP
O Prazer De Trabalhar Com Python
Introdução a linguagem Python 2.7
Orientação a objetos em Python (compacto)
Python Emsl2009
Introdução à Linguagem de programação Python
Trabalho sobre a linguagem Python
Py sintaxe
Python para desenvolvedores - material apoio (parte I)
Python2.5.ppt
Palestra Apresentando Python e Suas Aplicações
Pymordida0 Semana de computação da SOCIESC - 2008/10
Meta-programacao em python
Mini Curso de Python para Coding Dojo
Introdução ao Python & Web Services
Introdução a programação em python d2
Objetos Pythonicos - compacto
Python
Workshop Python.1
Iniciando em Python
Python: a primeira mordida
O Prazer De Trabalhar Com Python
Anúncio

Último (16)

PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PPTX
Arquitetura de computadores - Memórias Secundárias
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Custos e liquidação no SAP Transportation Management, TM130 Col18
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
COBITxITIL-Entenda as diferença em uso governança TI
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Processos na gestão de transportes, TM100 Col18
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Arquitetura de computadores - Memórias Secundárias

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