Python Emsl2009

998 visualizações

Publicada em

Minicurso de Python ministrado no Encontro Mineiro de Software Livre

0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
998
No SlideShare
0
A partir de incorporações
0
Número de incorporações
13
Ações
Compartilhamentos
0
Downloads
25
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Python Emsl2009

  1. 1. Julio Cesar Eiras Melanda - jcemelanda@gmail.com 14/10/09
  2. 2. Conteúdo <ul><li>Objetivos
  3. 3. O que é Python
  4. 4. Características Importantes </li></ul><ul><ul><li>Paradigma
  5. 5. Compilação
  6. 6. Tipagem
  7. 7. Escopo de variáveis
  8. 8. Multiplataforma
  9. 9. Estruturas de dados nativas
  10. 10. Outras características </li></ul></ul>
  11. 11. Conteúdo (cont.) <ul><li>Programando </li></ul><ul><ul><li>Começando...
  12. 12. Sintaxe básica
  13. 13. Fora do interpretador
  14. 14. Controle de fluxo – seleção
  15. 15. Controle de fluxo – laço
  16. 16. Controle de fluxo – laço
  17. 17. 'Abrangência' de listas – List comprehension
  18. 18. Subprogramas
  19. 19. Orientação a Objetos
  20. 20. Programação funcional </li></ul></ul>
  21. 21. Conteúdo (cont.) <ul><li>Módulos </li><ul><li>Importando módulos
  22. 22. Módulos da biblioteca padrão
  23. 23. A função dir()
  24. 24. Outros módulos </li></ul><li>Programas que usam Python
  25. 25. Referências </li></ul>
  26. 26. Objetivos Apresentar a linguagem de programação Python em sua versão 2.x pois houve quebra de compatibilidade na versão 3.0 que ainda não é largamente usada. Desta forma, serão abordados tópicos referentes ao projeto da linguagem, suas características, exemplos de como funciona a programação e programas que usam esta linguagem que está entre as que mais vem crescendo em importância nos últimos anos.
  27. 27. O que é Python Python é uma linguagem de programação poderosa e fácil de aprender que possui estruturas de alto nível, com uma abordagem simples e efetiva à programação orientada a objetos. [1] Foi criada no início da década de 90 por Guido van Rossum na Holanda no Stichting Mathematisch Centrum. Todos os releases, exceto 1.6, 1.6.1 e 2.0 são distribuídos sob licença GPL-compatível. [2] O nome vem do show da BBC “Monty Python's Flying Circus”, e não das cobras de mesmo nome.[1] Python é muito versátil podendo ser usada em aplicativos Web do lado servidor, jogos, programas de controle e configuração de sistemas, scripts, editores de imagens, music players, Web browsers e muito mais.
  28. 28. Características Importantes
  29. 29. Características Importantes <ul><li>Paradigmas </li></ul><ul><ul><li>Multi-paradigma </li></ul></ul><ul><ul><ul><li>Orientada a Objetos
  30. 30. Procedural
  31. 31. Funcional
  32. 32. Scripting </li></ul></ul></ul><ul><li>Compilação </li></ul><ul><ul><li>Interpretada
  33. 33. Programação interativa
  34. 34. Bytecodes </li></ul></ul>
  35. 35. Características Importantes <ul><li>Tipagem </li></ul><ul><ul><li>Dinâmica
  36. 36. Forte </li></ul></ul><ul><li>Escopo de variáveis </li></ul><ul><ul><li>Estático com vinculação dinâmica
  37. 37. Podem ser acessados diretamente: </li></ul></ul><ul><ul><ul><li>Variáveis locais
  38. 38. Variáveis globais
  39. 39. Variáveis externas (nomes pré-definidos) </li></ul></ul></ul>
  40. 40. Características Importantes <ul><li>Multiplataforma </li></ul><ul><ul><li>Windows
  41. 41. GNU/Linux
  42. 42. MacOS
  43. 43. PalmOS
  44. 44. Symbian </li></ul></ul><ul><li>Estruturas de dados nativas </li></ul><ul><ul><li>Listas
  45. 45. Dicionários
  46. 46. Tuplas
  47. 47. Conjuntos </li></ul></ul>
  48. 48. Características Importantes <ul><li>Outras características </li></ul><ul><ul><li>Tudo é objeto (inclusive tipos de dados)
  49. 49. Tipo nativo para números complexos
  50. 50. Extensa biblioteca padrão
  51. 51. Muitos módulos externos
  52. 52. Suporta coerção </li></ul></ul>
  53. 53. Programando
  54. 54. Começando... <ul><li>Na programação interativa, basta abrir o interpretador e digitar os comandos </li></ul>>>> print “Olha eu aqui!” #isto é um comentário Olha eu aqui! >>> x = '3' #Não precisa declarar x >>> x #Mostra o objeto vinculado ao nome x '3'
  55. 55. Sintaxe Básica <ul><li>Blocos são definidos por identação </li></ul>>>> i = 0 #Sem ';' no final da instrução >>> while i < 2: #Sem begin ou { ... print i, #vírgula evita quebra de linha ... i += 1 #operador de atribuição composto ... #sem end ou } 0 1 <ul><li>O ':' indica que a próxima instrução faz parte de um bloco </li></ul>
  56. 56. Fora do interpretador <ul><li>Código fonte em arquivo .py
  57. 57. Exemplo: </li></ul>#!/usr/bin/env python #-*- coding: utf8 -*- #mentira.py '''Mostra uma mentira na tela''' print “Não fui eu!!!” <ul><li>Primeira linha para chamar o interpretador python (somente em Unix-like)
  58. 58. Segunda linha conta para o interpretador qual a codificação do arquivo. Sem ela, é levantada uma exceção se houver caracteres não ASCII. </li></ul>
  59. 59. Fora do interpretador (cont.) <ul><li>A terceira linha é um comentário com o nome do arquivo python. É convenção colocar este comentário em todos os arquivos criados.
  60. 60. A quarta linha é uma dosctrnig (texto de documentação). Todos objetos devem ter uma docstring antes de começar com as instruções propriamente (convenção).
  61. 61. Finalmente a instrução que será interpretada e executada </li></ul>
  62. 62. Controle de fluxo - seleção <ul><li>Em python não existe switch </li></ul>if x < 0 : pass #usado para não fazer nada else: pass if y == 1 : #if e elif funcionam como cases pass #com a vantagem de aceitar elif y > 2 : #expressões pass else: #Faz o papel do default pass
  63. 63. Controle de fluxo - seleção <ul><li>Fazer um switch usando dicionários:
  64. 64. def case_1(): </li><ul><li>print &quot;um&quot; </li></ul><li>def case_2(): </li><ul><li>print &quot;dois&quot; </li></ul><li>def case_3(): </li><ul><li>print &quot;tres&quot; </li></ul><li>switch ={ '1' :case_1, </li><ul><li>'2': case_2,
  65. 65. '3' :case_3} </li></ul></ul><ul>x = raw_input() try: #pega excessão <ul>switch[x]() </ul>except: <ul>print &quot;default&quot; </ul></ul>
  66. 66. Controle de fluxo - laço <ul><li>Temos duas instruções para laços – for e while (não tem do )
  67. 67. while executa um laço condicional pós-teste </li></ul>while x >= 0 : y = x * x x -= 1 <ul><li>for executa iteração sobre uma lista </li></ul>for i in [ 1 , 2 , 3 , 4 ]: print ( ' i vale %d' ) % i <ul><li>Podemos gerar listas com a função range() </li></ul>>>> range (5) [0, 1, 2, 3, 4]
  68. 68. Controle de fluxo - laço <ul><li>Para controle com instruções localizadas pelo usuário temos as instruções break e continue do mesmo modo que em C
  69. 69. Para os casos em que o laço terminar normalmente significa algo, usa-se a instrução else </li></ul>for i in range ( 2 , 10 ): for n in range ( 2 , n): if i % n == 0: print i, '=' , n, '*' , i/n break else: print i, 'é um número primo'
  70. 70. 'Abrangência' de listas <ul><li>Utilizado para avaliar listas de forma clara e concisa.
  71. 71. >>> vet = [2, 4, 6]
  72. 72. >>> [3*x for x in vet]
  73. 73. [6, 12, 18]
  74. 74. >>> [[x,x**2] for x in vet]
  75. 75. [[2, 4], [4, 16], [6, 36]]
  76. 76. >>> [2*x for x in vet if x > 3]
  77. 77. [8, 12] </li></ul>
  78. 78. Subprogramas <ul><li>Todos subprogramas são funções
  79. 79. Funções sem return, ou com return sem parâmetros retornam None </li></ul>def fib(n): ''' Calcula fibonacci até n ''' a, b = 0 , 1 #Atribuições simultâneas while b < n: print b a, b = b, a + b #Avalia da esquerda #para a direita
  80. 80. Subprogramas (cont.) def continuar(opcao = true ): ''' continua alguma coisa ''' if opcao: print “Continuando” else: print “Você decidiu parar” >>> continuar() #parâmetro é opcional Continuando >>> continuar( false ) Você decidiu parar
  81. 81. Orientação a Objetos <ul><li>Tudo é objeto, da estrutura mais simples à mais complexa
  82. 82. Classes
  83. 83. class MinhaClasse(SuperClasse1): </li><ul><li>''' Docstring qualquer '''
  84. 84. atributo1 = 'valor do atributo 1'
  85. 85. _atributo2 = 9
  86. 86. def __init__( self , atributo1, atributoS): </li><ul><li>self.atributo1 = atributo1
  87. 87. SuperClasse1.__init__(atributoS) </li></ul><li>def metodo1( self , *params): </li><ul><li>pass </li></ul></ul></ul>
  88. 88. Orientação a objetos <ul><li>Python possui herança múltipla
  89. 89. Todo método de classe recebe o parâmetro self
  90. 90. Atributos não públicos : _atributo2
  91. 91. Método __init__ é o primeiro a ser executado
  92. 92. __init__ não é um construtor </li></ul>
  93. 93. Orientação a objetos (cont.) <ul>x = classe() #Instanciando... y = classe2(param) x.metodo1(param1, param2) #utilizando métodos z = y.troca1(a, b) var = x.atributo1 #utilizando atributo y.atributo2 = 'Arara' #'setando' atributos </ul>
  94. 94. Programação funcional <ul><li>filter(func, lista) retorna uma sequência com os itens da lista para os quais func é verdadeiro
  95. 95. def f(x): return x % 2 != 0 and x % 3 != 0
  96. 96. >>> filter (f, range (2, 25))
  97. 97. [5, 7, 11, 13, 17, 19, 23]
  98. 98. map(func, lista) aplica func(item) em cada item da lista retornando uma lista de valores retornados por func(item)
  99. 99. def f(x): return x*x*x
  100. 100. >>> map (f, range (1, 5))
  101. 101. [1, 8, 27, 64] # códigos extraídos de [1] </li></ul>
  102. 102. Programação funcional (cont.) <ul><li>reduce(func, lista) aplica sucessivamente func aos elementos de lista dois a dois, retornando um único valor
  103. 103. def add(x, y): return x + y
  104. 104. >>> reduce (add, range (1, 11))
  105. 105. 55
  106. 106. Funções lambda: cria funções anônimas simples
  107. 107. def incrementa(n) </li><ul><li>return lambda x: x + n #somente uma </li></ul><li>>>> f = incrementa(20) #expressão
  108. 108. >>> f(20)
  109. 109. 40 </li></ul>
  110. 110. Módulos
  111. 111. Importando Módulos <ul><li>Para simplesmente importar o módulo:
  112. 112. >>> import modulo
  113. 113. Para importar tudo de um módulo
  114. 114. >>> from modulo import *
  115. 115. Para importar algo de um módulo
  116. 116. >>> from modulo import classe
  117. 117. >>> import modulo.class </li></ul>
  118. 118. Módulos da biblioteca padrão <ul><li>math
  119. 119. >>> import math
  120. 120. >>> math.pi
  121. 121. 3.1415926535897931
  122. 122. >>>math.cos(2*math.pi)
  123. 123. 1.0
  124. 124. os
  125. 125. >>> import os
  126. 126. >>> os.getpid()
  127. 127. 5411
  128. 128. >>> os.system('clear') #limpa a tela </li></ul>
  129. 129. Módulos da biblioteca padrão (cont.) <ul><li>random
  130. 130. >>> import random
  131. 131. >>> random.choice(['pera', 'uva', 'maca'])
  132. 132. 'uva'
  133. 133. >>> random.random()
  134. 134. 0.81454527066344051
  135. 135. >>> random.randrange(10)
  136. 136. 7 </li></ul>
  137. 137. A função dir() <ul><li>Retorna uma lista com todos os nomes contidos num módulo
  138. 138. >>> dir(math)
  139. 139. ['__doc__', '__file__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'exp', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'hypot', 'isinf', 'isnan', 'ldexp', 'log', 'log10', 'log1p', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc'] </li></ul>
  140. 140. A função dir() (cont.) <ul><li>Sem parâmetros, retorna os nomes gloabais atuais </li></ul>>>>x = 2 >>> dir() ['__builtins__', '__doc__', '__name__', '__package__', 'x']
  141. 141. Outros Módulos <ul><li>Interfaces gráficas </li><ul><li>wxPython
  142. 142. TkInter
  143. 143. PyQt
  144. 144. PyGTK </li></ul><li>Científico e numérico </li><ul><li>numpy
  145. 145. scipy
  146. 146. ScientificPython
  147. 147. BioPython </li></ul></ul>
  148. 148. Outros Módulos (cont.) <ul><li>Jogos </li><ul><li>Pygame </li></ul><li>Imagens </li><ul><li>PyOpenGL
  149. 149. PyOgre
  150. 150. Soya 3D
  151. 151. Panda 3d </li></ul><li>Web </li><ul><li>Django
  152. 152. TurboGears
  153. 153. Zope </li></ul></ul>
  154. 154. Programas que usam Python
  155. 155. <ul><li>YUM
  156. 156. Wicd
  157. 157. BitTorrent
  158. 158. ForecastWatch
  159. 159. Wing IDE
  160. 160. Blender (renderização de imagens)
  161. 161. OpenOffice
  162. 162. Scribus
  163. 163. Vim
  164. 164. GIMP
  165. 165. Inkscape
  166. 166. Poser </li></ul>
  167. 167. <ul><li>Jogos </li><ul><li>Battlefield 2 (Windows)
  168. 168. Civilization IV (Windows)
  169. 169. Frequency (PS2)
  170. 170. Freedom Force (Windows, MacOSX)
  171. 171. Star Trek Bridge Commander (Windows)
  172. 172. Vegastrike (Multiplataforma)
  173. 173. Frets On Fire (Multiplataforma)
  174. 174. SnakeWorlds (Multiplataforma)
  175. 175. SolarWolf (Multiplataforma) </li></ul></ul>
  176. 176. Frets On Fire Civilization IV
  177. 177. The Gimp Scribus
  178. 178. Mount & Blade PySol
  179. 179. Inkscape Poser
  180. 180. Solar Wolf Snake Worlds
  181. 181. Referências <ul><li>Rossum, Guido von, PythonTutorial– Release 2.4.2, 2005, Python Software Foundation
  182. 182. Rossum, Guido von, Python Tutorial – Release 2.6.1, 2009, Python Software Foundation - [1]
  183. 183. Rossum, Guido von, The Python Language Reference – Release 2.6.1, 2009, Python Software Foundation - [2]
  184. 184. Pilgrim, Mark, Dive Into Python – versão 5.4, 2004, diveintopython.org </li></ul>
  185. 185. Obrigado!!!

×