Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Python Emsl2009

Python Emsl2009

Minicurso de Python ministrado no Encontro Mineiro de Software Livre

Julio Cesar Melanda

October 09, 2014
Tweet

More Decks by Julio Cesar Melanda

Other Decks in Programming

Transcript

  1. Conteúdo  Objetivos  O que é Python  Características

    Importantes  Paradigma  Compilação  Tipagem  Escopo de variáveis  Multiplataforma  Estruturas de dados nativas  Outras características
  2. Conteúdo (cont.)  Programando  Começando...  Sintaxe básica 

    Fora do interpretador  Controle de fluxo – seleção  Controle de fluxo – laço  Controle de fluxo – laço  'Abrangência' de listas – List comprehension  Subprogramas  Orientação a Objetos  Programação funcional
  3. Conteúdo (cont.) • Módulos – Importando módulos – Módulos da

    biblioteca padrão – A função dir() – Outros módulos • Programas que usam Python • Referências
  4. 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.
  5. 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.
  6. Características Importantes  Paradigmas  Multi-paradigma  Orientada a Objetos

     Procedural  Funcional  Scripting  Compilação  Interpretada  Programação interativa  Bytecodes
  7. Características Importantes  Tipagem  Dinâmica  Forte  Escopo

    de variáveis  Estático com vinculação dinâmica  Podem ser acessados diretamente:  Variáveis locais  Variáveis globais  Variáveis externas (nomes pré-definidos)
  8. Características Importantes  Multiplataforma  Windows  GNU/Linux  MacOS

     PalmOS  Symbian  Estruturas de dados nativas  Listas  Dicionários  Tuplas  Conjuntos
  9. Características Importantes  Outras características  Tudo é objeto (inclusive

    tipos de dados)  Tipo nativo para números complexos  Extensa biblioteca padrão  Muitos módulos externos  Suporta coerção
  10. Começando...  Na programação interativa, basta abrir o interpretador e

    digitar os comandos >>> 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'
  11. Sintaxe Básica  Blocos são definidos por identação >>> 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  O ':' indica que a próxima instrução faz parte de um bloco
  12. Fora do interpretador  Código fonte em arquivo .py 

    Exemplo: #!/usr/bin/env python #-*- coding: utf8 -*- #mentira.py '''Mostra uma mentira na tela''' print “Não fui eu!!!”  Primeira linha para chamar o interpretador python (somente em Unix-like)  Segunda linha conta para o interpretador qual a codificação do arquivo. Sem ela, é levantada uma exceção se houver caracteres não ASCII.
  13. Fora do interpretador (cont.)  A terceira linha é um

    comentário com o nome do arquivo python. É convenção colocar este comentário em todos os arquivos criados.  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).  Finalmente a instrução que será interpretada e executada
  14. Controle de fluxo - seleção  Em python não existe

    switch 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
  15. Controle de fluxo - seleção • Fazer um switch usando

    dicionários: def case_1(): print "um" def case_2(): print "dois" def case_3(): print "tres" switch ={'1':case_1, '2':case_2, '3':case_3} x = raw_input() try: #pega excessão switch[x]() except: print "default"
  16. Controle de fluxo - laço  Temos duas instruções para

    laços – for e while (não tem do)  while executa um laço condicional pós-teste while x >= 0: y = x * x x -= 1  for executa iteração sobre uma lista for i in [1, 2 ,3 ,4]: print (' i vale %d') % i  Podemos gerar listas com a função range() >>> range(5) [0, 1, 2, 3, 4]
  17. Controle de fluxo - laço  Para controle com instruções

    localizadas pelo usuário temos as instruções break e continue do mesmo modo que em C  Para os casos em que o laço terminar normalmente significa algo, usa-se a instrução else 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'
  18. 'Abrangência' de listas • Utilizado para avaliar listas de forma

    clara e concisa. >>> vet = [2, 4, 6] >>> [3*x for x in vet] [6, 12, 18] >>> [[x,x**2] for x in vet] [[2, 4], [4, 16], [6, 36]] >>> [2*x for x in vet if x > 3] [8, 12]
  19. Subprogramas  Todos subprogramas são funções  Funções sem return,

    ou com return sem parâmetros retornam None 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
  20. 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
  21. Orientação a Objetos • Tudo é objeto, da estrutura mais

    simples à mais complexa • Classes class MinhaClasse(SuperClasse1): ''' Docstring qualquer ''' atributo1 = 'valor do atributo 1' _atributo2 = 9 def __init__(self, atributo1, atributoS): self.atributo1 = atributo1 SuperClasse1.__init__(atributoS) def metodo1(self, *params): pass
  22. Orientação a objetos • Python possui herança múltipla • Todo

    método de classe recebe o parâmetro self • Atributos não públicos : _atributo2 • Método __init__ é o primeiro a ser executado • __init__ não é um construtor
  23. Orientação a objetos (cont.) 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
  24. Programação funcional • filter(func, lista) retorna uma sequência com os

    itens da lista para os quais func é verdadeiro def f(x): return x % 2 != 0 and x % 3 != 0 >>> filter(f, range(2, 25)) [5, 7, 11, 13, 17, 19, 23] • map(func, lista) aplica func(item) em cada item da lista retornando uma lista de valores retornados por func(item) def f(x): return x*x*x >>> map(f, range(1, 5)) [1, 8, 27, 64] # códigos extraídos de [1]
  25. Programação funcional (cont.) • reduce(func, lista) aplica sucessivamente func aos

    elementos de lista dois a dois, retornando um único valor def add(x, y): return x + y >>> reduce(add, range(1, 11)) 55 • Funções lambda: cria funções anônimas simples def incrementa(n) return lambda x: x + n #somente uma >>> f = incrementa(20) #expressão >>> f(20) 40
  26. Importando Módulos • Para simplesmente importar o módulo: >>> import

    modulo • Para importar tudo de um módulo >>> from modulo import * • Para importar algo de um módulo >>> from modulo import classe >>> import modulo.class
  27. Módulos da biblioteca padrão • math >>> import math >>>

    math.pi 3.1415926535897931 >>>math.cos(2*math.pi) 1.0 • os >>> import os >>> os.getpid() 5411 >>> os.system('clear') #limpa a tela
  28. Módulos da biblioteca padrão (cont.) • random >>> import random

    >>> random.choice(['pera', 'uva', 'maca']) 'uva' >>> random.random() 0.81454527066344051 >>> random.randrange(10) 7
  29. A função dir() • Retorna uma lista com todos os

    nomes contidos num módulo >>> dir(math) ['__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']
  30. A função dir() (cont.) • Sem parâmetros, retorna os nomes

    gloabais atuais >>>x = 2 >>> dir() ['__builtins__', '__doc__', '__name__', '__package__', 'x']
  31. Outros Módulos • Interfaces gráficas – wxPython – TkInter –

    PyQt – PyGTK • Científico e numérico – numpy – scipy – ScientificPython – BioPython
  32. Outros Módulos (cont.) • Jogos – Pygame • Imagens –

    PyOpenGL – PyOgre – Soya 3D – Panda 3d • Web – Django – TurboGears – Zope
  33. • YUM • Wicd • BitTorrent • ForecastWatch • Wing

    IDE • Blender (renderização de imagens) • OpenOffice • Scribus • Vim • GIMP • Inkscape • Poser
  34. • Jogos – Battlefield 2 (Windows) – Civilization IV (Windows)

    – Frequency (PS2) – Freedom Force (Windows, MacOSX) – Star Trek Bridge Commander (Windows) – Vegastrike (Multiplataforma) – Frets On Fire (Multiplataforma) – SnakeWorlds (Multiplataforma) – SolarWolf (Multiplataforma)
  35. Referências • Rossum, Guido von, PythonTutorial– Release 2.4.2, 2005, Python

    Software Foundation • Rossum, Guido von, Python Tutorial – Release 2.6.1, 2009, Python Software Foundation - [1] • Rossum, Guido von, The Python Language Reference – Release 2.6.1, 2009, Python Software Foundation - [2] • Pilgrim, Mark, Dive Into Python – versão 5.4, 2004, diveintopython.org