Python
-
Upload
matheus-dos-santos-lima -
Category
Documents
-
view
532 -
download
2
Transcript of Python
![Page 1: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/1.jpg)
Lembro-me quando aprendi
PythonFoi uma tarde agradável...
(autor desconhecido)
Matheus dos Santos LimaGithub: matheussl
![Page 2: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/2.jpg)
Apresentação
• Prata da casa ;• Desenvolvedor web desde os 15 anos;• Pythonista há 3 anos;• matheussl no github;• Grupo Python Sergipe (GPS :P);• PUG-SE, Django-BR e Python-BR;
![Page 3: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/3.jpg)
Ritmo do Curso
• Hands-on;• Contra o tempo;• Python numa tarde;• Exemplos retirados do• “Tutorial oficial de Python”;
![Page 4: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/4.jpg)
Ops...
Antes de começar...
![Page 5: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/5.jpg)
Roteiro
• Python?• Um passeio pela linguagem• Blocos• Controle de fluxo• Laços• Tipos• Funções• Estrutura de Dados• Classes• Iteradores
![Page 6: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/6.jpg)
Python?
• Python é uma linguagem de altíssimo nível orientada a objeto, de tipagem dinâmica e forte, interpretada e interativa.
– Sintaxe clara;– legibilidade;
![Page 7: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/7.jpg)
Python?
• A linguagem foi criada em 1990 por Guido van Rossum
– Google (aplicações Web).– Yahoo (aplicações Web).– Microsoft (IronPython: Python para .NET).– Nokia (disponível para as linhas recentes de
celulares e PDAs).– Disney (animações 3D).
![Page 8: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/8.jpg)
Mão na massa!
![Page 9: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/9.jpg)
Um passeio pela linguagem
# este é o primeiro comentárioSPAM = 1 # e este é o segundo
comentário # ... e agora um terceiro!STRING = "# Isto não é um comentário."
Comentários
![Page 10: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/10.jpg)
Um passeio pela linguagem
>>> 2+2
4
>>> # Isto é um comentário
... 2+2
4
>>> 2+2 # em um comentário na mesma linha do código
4
>>> (50-5*6)/4
5
>>> # A divisão entre inteiros arredonda para baixo:
... 7/3
2
>>> 7/-3
-3
Operações matemáticas
![Page 11: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/11.jpg)
Um passeio pela linguagem
>>> largura = 20>>> algura = 5*9>>> largura * altura900>>> x = y = z = 0 # Zerar x, y, z>>> x0>>> y0>>> z0
Atribuindo valores
![Page 12: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/12.jpg)
Um passeio pela linguagem
>>> 'spam eggs''spam eggs'>>> 'doesn\'t'"doesn't">>> "doesn't""doesn't">>> '"Yes," he said.''"Yes," he said.'>>> "\"Yes,\" he said."'"Yes," he said.'>>> '"Isn\'t," she said.''"Isn\'t," she said.'
Strings
![Page 13: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/13.jpg)
Um passeio pela linguagem
>>> palavra = 'Ajuda' + 'Z'>>> palavra'AjudaZ'>>> '<' + palavra*5 + '>''<AjudaZAjudaZAjudaZAjudaZAjudaZ>'
Concatenando strings
![Page 14: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/14.jpg)
Um passeio pela linguagem
>>> 'str' 'ing' # <- Isto funciona'string'>>> 'str'.strip() + 'ing' # <- Isto funciona'string'>>> 'str'.strip() 'ing' # <- Isto é inválido File "<stdin>", line 1, in ? 'str'.strip() 'ing' ^SyntaxError: invalid syntax
Concatenando strings
![Page 15: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/15.jpg)
Um passeio pela linguagem
>>> palavra[4]'a'>>> palavra[0:2]'Aj'>>> palavra[2:4]'ud'>>> palavra[:2] # Os dois primeiros caracteres'Aj'>>> palavra[2:] # Tudo menos os dois primeiros
caracteres'udaZ'
Strings podem ser indexadas
![Page 16: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/16.jpg)
Strings não podem ser alteradas!
![Page 17: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/17.jpg)
Um passeio pela linguagem
>>> palavra[0] = 'x'Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: 'str' object does not support item
assignment>>> palavra[:1] = 'Splat'Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: 'str' object does not support item
assignment
Tentando alterar strings
![Page 18: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/18.jpg)
Blocos
• Os blocos de código são definidos pela endentação.
– “:” é o caractere que precede um bloco
![Page 19: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/19.jpg)
Blocos
>>> a = 2>>> if a == 0:... print 'a é igual a zero'... elif a == 1:... print 'a é igual a um'... else:... print 'a é diferente de zero e um.'...a é diferente de zero e um.
Blocos
![Page 20: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/20.jpg)
Controles de Fluxo
>>> x = int(raw_input("Favor digitar um inteiro: "))Favor digitar um inteiro: 42>>> if x < 0:... x = 0... print 'Negativo alterado para zero'... elif x == 0:... print 'Zero'... elif x == 1:... print 'Unidade'... else:... print 'Mais'...Mais
Comando if
![Page 21: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/21.jpg)
Controles de Fluxo
• O comando for difere das linguagens C, Pascal ou Java.
– Itera sobre uma seqüência qualquer, ao invés de progressões aritméticas;
![Page 22: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/22.jpg)
Controles de Fluxo
>>> # Medir o tamanho de algumas strings:>>> a = ['gato', 'janela', 'defenestrar']>>> for x in a:... print x, len(x)...gato 4janela 6defenestrar 11>>>
Comando for
![Page 23: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/23.jpg)
Controles de Fluxo
• Não é seguro alterar a seqüência da lista durante a iteração.
– Solução: passar uma cópia da seqüência.
![Page 24: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/24.jpg)
Controles de Fluxo
>>> for x in a[:]: # fazer uma cópia da lista inteira
... if len(x) > 6: a.insert(0, x)
...>>> a['defenestrar', 'gato', 'janela', 'defenestrar']
Comando for
![Page 25: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/25.jpg)
Controles de Fluxo
>>> range(10)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> range(5, 10)[5, 6, 7, 8, 9]>>> range(0, 10, 3)[0, 3, 6, 9]>>> range(-10, -100, -30)[-10, -40, -70]>>> a = ['Mary', 'had', 'a', 'little', 'lamb']>>> for i in range(len(a)):... print i, a[i]...0 Mary1 had2 a3 little4 lamb
Função range()
![Page 26: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/26.jpg)
Controles de Fluxo
>>> for n in range(2, 10):... for x in range(2, n):... if n % x == 0:... print n, '=', x, '*', n/x... break... else:... # laço terminou sem encontrar um fator... print n, 'é um número primo'...2 é um número primo3 é um número primo4 = 2 * 25 é um número primo6 = 2 * 37 é um número primo8 = 2 * 49 = 3 * 3
break e continue, e cláusulas else em laços
![Page 27: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/27.jpg)
Controles de Fluxo
>>> while True:... pass # esperar interrupção via teclado
(Ctrl+C)...>>> def initlog(*args):... pass # Lembrar de implementar isto!...
Comando pass
![Page 28: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/28.jpg)
Funções
def confirmar(pergunta, tentativas=4, reclamacao='Sim ou não, por favor!‘):
while True: ok = raw_input(pergunta).lower() if ok in ('s', 'si', 'sim'): return True if ok in ('n', 'no', 'não', 'nananinanão'): return False tentativas = tentativas - 1 if tentativas == 0: raise IOError('usuario nao quer cooperar') print reclamacao
Definindo funções
![Page 29: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/29.jpg)
Funções
• A função do slide anterior pode ser invocada de várias formas:– fornecendo apenas o argumento
obrigatório: confirmar('Deseja mesmo encerrar?')– fornecendo um dos argumentos
opcionais: confirmar('Sobrescrever o arquivo?', 2)– ou fornecendo todos os
argumentos: confirmar('Sobrescrever o arquivo?', 2, 'Escolha apenas s ou n')
![Page 30: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/30.jpg)
Funções
>>> def minha_funcao():... """Não faz nada, mas é documentada....... Realmente ela não faz nada.... """... pass...>>> print minha_funcao.__doc__Não faz nada, mas é documentada.
Realmente ela não faz nada.
Strings de documentação
![Page 31: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/31.jpg)
Tratamento de Exceções
>>> def divide(x, y):... try:... resultado = x / y... except ZeroDivisionError:... print "divisão por zero!“... else:... print "resultado é", resultado... finally:... print "executando a cláusula finally"...>>> divide(2, 1)resultado é 2executando a cláusula finally>>> divide(2, 0)divisão por zero!executando a cláusula finally>>> divide("2", "1")executando a cláusula finallyTraceback (most recent call last): File "<stdin>", line 1, in ? File "<stdin>", line 3, in divideTypeError: unsupported operand type(s) for /: 'str' and 'str'
Tratamento de exceções
![Page 32: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/32.jpg)
Estrutura de dados
>>> a = [66.25, 333, 333, 1, 1234.5]>>> print a.count(333), a.count(66.25), a.count('x')2 1 0>>> a.insert(2, -1)>>> a.append(333)>>> a[66.25, 333, -1, 333, 1, 1234.5, 333]>>> a.index(333)1>>> a.remove(333)>>> a[66.25, -1, 333, 1, 1234.5, 333]>>> a.reverse()>>> a[333, 1234.5, 1, 333, -1, 66.25]>>> a.sort()>>> a[-1, 1, 66.25, 333, 333, 1234.5]
Listas
![Page 33: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/33.jpg)
Estrutura de Dados
• Exercício – Demonstrem como criar uma pilha usando lista.– Dica: pop(), append()
![Page 34: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/34.jpg)
Estrutura de Dados
>>> pilha = [3, 4, 5]>>> pilha.append(6)>>> pilha.append(7)>>> pilha[3, 4, 5, 6, 7]>>> pilha.pop()7>>> pilha[3, 4, 5, 6]>>> pilha.pop()6>>> pilha.pop()5>>> pilha[3, 4]
Utilizando Lista como Pilha
![Page 35: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/35.jpg)
Estrutura de Dados
>>> from collections import deque>>> fila = deque(["Eric", "John", "Michael"])>>> fila.append("Terry") # Terry chega>>> fila.append("Graham") # Graham chega>>> fila.popleft() # O primeiro a chegar
parte'Eric'>>> fila.popleft() # O segundo a chegar parte'John'>>> fila # O resto da fila, em
ordem de chegadadeque(['Michael', 'Terry', 'Graham'])
Usando listas como filas
![Page 36: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/36.jpg)
Estrutura de Dados
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y][(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]>>>>>> combs = []>>> for x in [1,2,3]:... for y in [3,1,4]:... if x != y:... combs.append((x, y))...>>> combs[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]>>>>>>>>> matriz = [... [1, 2, 3, 4],... [5, 6, 7, 8],... [9, 10, 11, 12],... ]
Mais sobre listas
![Page 37: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/37.jpg)
Estrutura de Dados
>>> a = [-1, 1, 66.25, 333, 333, 1234.5]>>> del a[0]>>> a[1, 66.25, 333, 333, 1234.5]>>> del a[2:4]>>> a[1, 66.25, 1234.5]>>> del a[:]>>> a[]
Comando del
![Page 38: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/38.jpg)
Estrutura de Dados
>>> t = 12345, 54321, 'bom dia!'>>> t[0]12345>>> t(12345, 54321, 'bom dia!')>>> # Tuplas podem ser aninhadas:... u = t, (1, 2, 3, 4, 5)>>> u((12345, 54321, 'bom dia!'), (1, 2, 3, 4, 5))>>>>>>>>>>>> a, b = b, a # troca os valores de a e b
Tuplas
![Page 39: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/39.jpg)
Estrutura de Dados
>>> tel = {'jack': 4098, 'sape': 4139}>>> tel['guido'] = 4127>>> tel{'sape': 4139, 'guido': 4127, 'jack': 4098}>>> tel['jack']4098>>> del tel['sape']>>> tel['irv'] = 4127>>> tel{'guido': 4127, 'irv': 4127, 'jack': 4098}>>> tel.keys()['guido', 'irv', 'jack']>>> 'guido' in telTrue
Dicionários
![Page 40: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/40.jpg)
Módulos
• Um módulo é um arquivo Python contendo definições e instruções.– __name__ armazena o nome o módulo;
![Page 41: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/41.jpg)
Módulos
# coding: utf-8# Módulo números de Fibonacci
def fib(n): # exibe a série de Fibonacci de 0 até n a, b = 0, 1 while b < n: print b, a, b = b, a+b
def fib2(n): # devolve a série de Fibonacci de 0 até n resultado = [] a, b = 0, 1 while b < n: resultado.append(b) a, b = b, a+b return resultado
Criando um módulo
![Page 42: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/42.jpg)
Módulos
>>> import fibo>>>>>>>>> fibo.fib(1000)1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987>>> fibo.fib2(100)[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]>>> fibo.__name__'fibo'>>>>>>>>> fib = fibo.fib>>> fib(500)1 1 2 3 5 8 13 21 34 55 89 144 233 377
Importando e utilizando um módulo
![Page 43: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/43.jpg)
Módulos
if __name__ == "__main__": import sys fib(int(sys.argv[1]))
Executando um módulo
![Page 44: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/44.jpg)
Classes
• Em Python, as classes não trazem recursos fora do convencional.– Baseado em C++, Smalltalk e Modula-3;– Herança múltipla e todos os membros da classe são
públicos, como em C++;– Classes são objetos, como em Smalltalk;– As funções membro são virtuais, como em Modula-3;
![Page 45: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/45.jpg)
Classes
class NomeDaClasse: <instrução-1> . . . <instrução-N
Sintaxe de definição de uma classe
![Page 46: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/46.jpg)
Classes
>>> class MinhaClasse:... """Um exemplo simples de classe"""... i = 12345... def f(self):... return 'olá, mundo'... >>> x = MinhaClasse()>>> >>> class Complexo:... def __init__(self, parte_real, parte_imag):... self.r = parte_real... self.i = parte_imag...>>> x = Complexo(3.0, -4.5)>>> x.r, x.i(3.0, -4.5)
Criando um objeto classe
![Page 47: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/47.jpg)
Classes
• Python não possui variáveis de instância privadas– Convenção: prefixo “__”• __name• __idade
![Page 48: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/48.jpg)
Iteradores
class Inversor: """Iterador para percorrer uma sequencia de trás
para frente.""" def __init__(self, data): self.data = data self.index = len(data) def __iter__(self): return self def next(self): if self.index == 0: raise StopIteration self.index = self.index - 1 return self.data[self.index]
Iteradores
![Page 49: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/49.jpg)
Iteradores
>>> inv = Inversor('spam')>>> iter(inv)<__main__.Reverse object at 0x00A1DB50>>>> for car in inv:... print car...maps
Utilizando o iterador
![Page 50: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/50.jpg)
Iteradores
• Você acaba de usar um recurso de meta-programação pra criar geradores.– Fácil né?
![Page 51: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/51.jpg)
Ainda falta...
• Property• Decorators• Descriptors• __getattr__• Fameworks
![Page 52: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/52.jpg)
Continuação
• Hangout• matheuslima.org• @matheeusLimaaa
![Page 53: Python](https://reader036.fdocumentos.com/reader036/viewer/2022062319/55638e7ed8b42adf7a8b5255/html5/thumbnails/53.jpg)
Referências
• http://docs.python.org/tutorial/• http://turing.com.br/• Python para Desenvolvedores / Luiz Eduardo
Borges,Rio de Janeiro, Edição do Autor, 2010