Lembro-me quando aprendi    PythonFoi uma tarde agradável...      (autor desconhecido)   Matheus dos Santos Lima          ...
Apresentação•   Prata da casa ;•   Desenvolvedor web desde os 15 anos;•   Pythonista há 3 anos;•   matheussl no github;• ...
Ritmo do Curso•   Hands-on;•   Contra o tempo;•   Python numa tarde;•   Exemplos retirados do•   “Tutorial oficial de Pyth...
Ops...Antes de começar...
Roteiro•   Python?•   Um passeio pela linguagem•   Blocos•   Controle de fluxo•   Laços•   Tipos•   Funções•   Estrutura d...
Python?• Python é uma linguagem de altíssimo nível  orientada a objeto, de tipagem dinâmica e  forte, interpretada e inter...
Python?• A linguagem foi criada em 1990 por Guido van  Rossum  – Google (aplicações Web).  – Yahoo (aplicações Web).  – Mi...
Mão na massa!
Um passeio pela linguagemComentários# este é o primeiro comentárioSPAM = 1                 # e este é o segundo  comentári...
Um passeio pela linguagemOperações matemáticas>>>   2+24>>>   # Isto é um comentário...   2+24>>>   2+2    # em um comentá...
Um passeio pela linguagemAtribuindo valores>>>   largura = 20>>>   algura = 5*9>>>   largura * altura900>>>   x = y = z = ...
Um passeio pela linguagemStrings>>> spam eggsspam eggs>>> doesnt"doesnt">>> "doesnt""doesnt">>> "Yes," he said."Yes," he s...
Um passeio pela linguagemConcatenando strings>>> palavra = Ajuda + Z>>> palavraAjudaZ>>> < + palavra*5 + ><AjudaZAjudaZAju...
Um passeio pela linguagemConcatenando strings>>> str ing                  #   <-   Isto funcionastring>>> str.strip()     ...
Um passeio pela linguagemStrings podem ser indexadas>>> palavra[4]a>>> palavra[0:2]Aj>>> palavra[2:4]ud>>> palavra[:2]    ...
Strings não podem ser alteradas!
Um passeio pela linguagemTentando alterar strings>>> palavra[0] = xTraceback (most recent call last):  File "<stdin>", lin...
Blocos• Os blocos de código são definidos pela  endentação.  – “:” é o caractere que precede um bloco
BlocosBlocos>>>   a = 2>>>   if a == 0:...       print a é igual a zero...   elif a == 1:...       print a é igual a um......
Controles de FluxoComando if>>> x = int(raw_input("Favor digitar um inteiro: "))Favor digitar um inteiro: 42>>> if x < 0:....
Controles de Fluxo• O comando for difere das linguagens C, Pascal  ou Java.  – Itera sobre uma seqüência qualquer, ao invé...
Controles de FluxoComando for>>> # Medir o tamanho de algumas strings:>>> a = [gato, janela, defenestrar]>>> for x in a:.....
Controles de Fluxo• Não é seguro alterar a seqüência da lista  durante a iteração.  – Solução: passar uma cópia da seqüênc...
Controles de FluxoComando for>>> for x in a[:]: # fazer uma cópia da lista  inteira...    if len(x) > 6: a.insert(0, x)......
Controles de FluxoFunção range()>>> range(10)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> range(5, 10)[5, 6, 7, 8, 9]>>> range(0, 10,...
Controles de Fluxobreak e continue, e cláusulas else em laços>>>   for n in range(2, 10):...       for x in range(2, n):.....
Controles de FluxoComando pass>>> while True:...     pass # esperar interrupção via teclado  (Ctrl+C)...>>> def initlog(*a...
FunçõesDefinindo funçõesdef confirmar(pergunta, tentativas=4, reclamacao=Sim  ou não, por favor!‘):    while True:        ...
Funções• A função do slide anterior pode ser invocada  de várias formas:  – fornecendo apenas o argumento    obrigatório: ...
FunçõesStrings de documentação>>> def minha_funcao():...     """Não faz nada, mas é documentada.......     Realmente ela n...
Tratamento de ExceçõesTratamento de exceções>>> def divide(x, y):...     try:...         resultado = x / y...     except Z...
Estrutura de dadosListas>>> a = [66.25, 333, 333, 1, 1234.5]>>> print a.count(333), a.count(66.25), a.count(x)2 1 0>>> a.i...
Estrutura de Dados• Exercício   – Demonstrem como criar uma pilha usando lista.  – Dica: pop(), append()
Estrutura de DadosUtilizando Lista como Pilha>>>   pilha = [3, 4, 5]>>>   pilha.append(6)>>>   pilha.append(7)>>>   pilha[...
Estrutura de DadosUsando listas como filas>>> from collections import deque>>> fila = deque(["Eric", "John", "Michael"])>>...
Estrutura de DadosMais sobre listas>>> [(x, y) for x in [1,2,3] for   y in [3,1,4] if x != y][(1, 3), (1, 4), (2, 3), (2, ...
Estrutura de DadosComando del>>>   a = [-1, 1, 66.25, 333, 333, 1234.5]>>>   del a[0]>>>   a[1,   66.25, 333, 333, 1234.5]...
Estrutura de DadosTuplas>>> t = 12345, 54321, bom dia!>>> t[0]12345>>> t(12345, 54321, bom dia!)>>> # Tuplas podem ser ani...
Estrutura de DadosDicionários>>> tel = {jack: 4098, sape: 4139}>>> tel[guido] = 4127>>> tel{sape: 4139, guido: 4127, jack:...
Módulos• Um módulo é um arquivo Python contendo  definições e instruções.  – __name__ armazena o nome o módulo;
MódulosCriando um módulo# coding: utf-8# Módulo números de Fibonaccidef fib(n):     # exibe a série de Fibonacci de 0 até ...
MódulosImportando e utilizando um módulo>>> import fibo>>>>>>>>> fibo.fib(1000)1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 ...
MódulosExecutando um móduloif __name__ == "__main__":    import sys    fib(int(sys.argv[1]))
Classes• Em Python, as classes não trazem recursos  fora do convencional.  – Baseado em C++, Smalltalk e Modula-3;  – Hera...
ClassesSintaxe de definição de uma classeclass NomeDaClasse:    <instrução-1>    .    .    .    <instrução-N
ClassesCriando um objeto classe>>> class MinhaClasse:...     """Um exemplo simples de classe"""...     i = 12345...     de...
Classes• Python não possui variáveis de instância  privadas  – Convenção: prefixo “__”     • __name     • __idade
IteradoresIteradoresclass Inversor:    """Iterador para percorrer uma sequencia de trás  para frente."""    def __init__(s...
IteradoresUtilizando o iterador>>> inv = Inversor(spam)>>> iter(inv)<__main__.Reverse object at 0x00A1DB50>>>> for car in ...
Iteradores• Você acaba de usar um recurso de meta-  programação pra criar geradores.  – Fácil né?
Ainda falta...•   Property•   Decorators•   Descriptors•   __getattr__•   Fameworks
Continuação• Hangout• matheuslima.org• @matheeusLimaaa
Referências• http://docs.python.org/tutorial/• http://turing.com.br/• Python para Desenvolvedores / Luiz Eduardo  Borges,R...
Upcoming SlideShare
Loading in...5
×

Python

533

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
533
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Python

  1. 1. Lembro-me quando aprendi PythonFoi uma tarde agradável... (autor desconhecido) Matheus dos Santos Lima Github: matheussl matheus.se@gmail.com
  2. 2. 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;
  3. 3. Ritmo do Curso• Hands-on;• Contra o tempo;• Python numa tarde;• Exemplos retirados do• “Tutorial oficial de Python”;
  4. 4. Ops...Antes de começar...
  5. 5. Roteiro• Python?• Um passeio pela linguagem• Blocos• Controle de fluxo• Laços• Tipos• Funções• Estrutura de Dados• Classes• Iteradores
  6. 6. Python?• Python é uma linguagem de altíssimo nível orientada a objeto, de tipagem dinâmica e forte, interpretada e interativa. – Sintaxe clara; – legibilidade;
  7. 7. 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).
  8. 8. Mão na massa!
  9. 9. Um passeio pela linguagemComentários# este é o primeiro comentárioSPAM = 1 # e este é o segundo comentário # ... e agora um terceiro!STRING = "# Isto não é um comentário."
  10. 10. Um passeio pela linguagemOperações matemáticas>>> 2+24>>> # Isto é um comentário... 2+24>>> 2+2 # em um comentário na mesma linha do código4>>> (50-5*6)/45>>> # A divisão entre inteiros arredonda para baixo:... 7/32>>> 7/-3-3
  11. 11. Um passeio pela linguagemAtribuindo valores>>> largura = 20>>> algura = 5*9>>> largura * altura900>>> x = y = z = 0 # Zerar x, y, z>>> x0>>> y0>>> z0
  12. 12. Um passeio pela linguagemStrings>>> spam eggsspam eggs>>> doesnt"doesnt">>> "doesnt""doesnt">>> "Yes," he said."Yes," he said.>>> ""Yes," he said.""Yes," he said.>>> "Isnt," she said."Isnt," she said.
  13. 13. Um passeio pela linguagemConcatenando strings>>> palavra = Ajuda + Z>>> palavraAjudaZ>>> < + palavra*5 + ><AjudaZAjudaZAjudaZAjudaZAjudaZ>
  14. 14. Um passeio pela linguagemConcatenando strings>>> str ing # <- Isto funcionastring>>> str.strip() + ing # <- Isto funcionastring>>> str.strip() ing # <- Isto é inválido File "<stdin>", line 1, in ? str.strip() ing ^SyntaxError: invalid syntax
  15. 15. Um passeio pela linguagemStrings podem ser indexadas>>> palavra[4]a>>> palavra[0:2]Aj>>> palavra[2:4]ud>>> palavra[:2] # Os dois primeiros caracteresAj>>> palavra[2:] # Tudo menos os dois primeiros caracteresudaZ
  16. 16. Strings não podem ser alteradas!
  17. 17. Um passeio pela linguagemTentando alterar strings>>> palavra[0] = xTraceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: str object does not support item assignment>>> palavra[:1] = SplatTraceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: str object does not support item assignment
  18. 18. Blocos• Os blocos de código são definidos pela endentação. – “:” é o caractere que precede um bloco
  19. 19. BlocosBlocos>>> 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.
  20. 20. Controles de FluxoComando if>>> 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
  21. 21. 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;
  22. 22. Controles de FluxoComando for>>> # Medir o tamanho de algumas strings:>>> a = [gato, janela, defenestrar]>>> for x in a:... print x, len(x)...gato 4janela 6defenestrar 11>>>
  23. 23. 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.
  24. 24. Controles de FluxoComando for>>> for x in a[:]: # fazer uma cópia da lista inteira... if len(x) > 6: a.insert(0, x)...>>> a[defenestrar, gato, janela, defenestrar]
  25. 25. Controles de FluxoFunção range()>>> 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
  26. 26. Controles de Fluxobreak e continue, e cláusulas else em laços>>> 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
  27. 27. Controles de FluxoComando pass>>> while True:... pass # esperar interrupção via teclado (Ctrl+C)...>>> def initlog(*args):... pass # Lembrar de implementar isto!...
  28. 28. FunçõesDefinindo funçõesdef 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
  29. 29. 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, Escol ha apenas s ou n)
  30. 30. FunçõesStrings de documentação>>> 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.
  31. 31. Tratamento de ExceçõesTratamento 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
  32. 32. Estrutura de dadosListas>>> 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]
  33. 33. Estrutura de Dados• Exercício  – Demonstrem como criar uma pilha usando lista. – Dica: pop(), append()
  34. 34. Estrutura de DadosUtilizando Lista como Pilha>>> 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]
  35. 35. Estrutura de DadosUsando listas como filas>>> 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 parteEric>>> fila.popleft() # O segundo a chegar parteJohn>>> fila # O resto da fila, em ordem de chegadadeque([Michael, Terry, Graham])
  36. 36. Estrutura de DadosMais sobre listas>>> [(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],... ]
  37. 37. Estrutura de DadosComando del>>> 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[]
  38. 38. Estrutura de DadosTuplas>>> 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
  39. 39. Estrutura de DadosDicionários>>> 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
  40. 40. Módulos• Um módulo é um arquivo Python contendo definições e instruções. – __name__ armazena o nome o módulo;
  41. 41. MódulosCriando um módulo# coding: utf-8# Módulo números de Fibonaccidef 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+bdef 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
  42. 42. MódulosImportando e utilizando um módulo>>> 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
  43. 43. MódulosExecutando um móduloif __name__ == "__main__": import sys fib(int(sys.argv[1]))
  44. 44. 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;
  45. 45. ClassesSintaxe de definição de uma classeclass NomeDaClasse: <instrução-1> . . . <instrução-N
  46. 46. ClassesCriando um objeto classe>>> 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)
  47. 47. Classes• Python não possui variáveis de instância privadas – Convenção: prefixo “__” • __name • __idade
  48. 48. IteradoresIteradoresclass 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]
  49. 49. IteradoresUtilizando o iterador>>> inv = Inversor(spam)>>> iter(inv)<__main__.Reverse object at 0x00A1DB50>>>> for car in inv:... print car...maps
  50. 50. Iteradores• Você acaba de usar um recurso de meta- programação pra criar geradores. – Fácil né?
  51. 51. Ainda falta...• Property• Decorators• Descriptors• __getattr__• Fameworks
  52. 52. Continuação• Hangout• matheuslima.org• @matheeusLimaaa
  53. 53. 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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×