Slide 1

Slide 1 text

Julio Cesar Eiras Melanda - jcemelanda@gmail.com 14/10/09

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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.

Slide 6

Slide 6 text

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.

Slide 7

Slide 7 text

Características Importantes

Slide 8

Slide 8 text

Características Importantes  Paradigmas  Multi-paradigma  Orientada a Objetos  Procedural  Funcional  Scripting  Compilação  Interpretada  Programação interativa  Bytecodes

Slide 9

Slide 9 text

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)

Slide 10

Slide 10 text

Características Importantes  Multiplataforma  Windows  GNU/Linux  MacOS  PalmOS  Symbian  Estruturas de dados nativas  Listas  Dicionários  Tuplas  Conjuntos

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

Programando

Slide 13

Slide 13 text

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'

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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.

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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"

Slide 19

Slide 19 text

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]

Slide 20

Slide 20 text

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'

Slide 21

Slide 21 text

'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]

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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]

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

Módulos

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

Módulos da biblioteca padrão (cont.) • random >>> import random >>> random.choice(['pera', 'uva', 'maca']) 'uva' >>> random.random() 0.81454527066344051 >>> random.randrange(10) 7

Slide 33

Slide 33 text

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']

Slide 34

Slide 34 text

A função dir() (cont.) • Sem parâmetros, retorna os nomes gloabais atuais >>>x = 2 >>> dir() ['__builtins__', '__doc__', '__name__', '__package__', 'x']

Slide 35

Slide 35 text

Outros Módulos ● Interfaces gráficas – wxPython – TkInter – PyQt – PyGTK ● Científico e numérico – numpy – scipy – ScientificPython – BioPython

Slide 36

Slide 36 text

Outros Módulos (cont.) ● Jogos – Pygame ● Imagens – PyOpenGL – PyOgre – Soya 3D – Panda 3d ● Web – Django – TurboGears – Zope

Slide 37

Slide 37 text

Programas que usam Python

Slide 38

Slide 38 text

● YUM ● Wicd ● BitTorrent ● ForecastWatch ● Wing IDE ● Blender (renderização de imagens) ● OpenOffice ● Scribus ● Vim ● GIMP ● Inkscape ● Poser

Slide 39

Slide 39 text

● 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)

Slide 40

Slide 40 text

Frets On Fire Civilization IV

Slide 41

Slide 41 text

The Gimp Scribus

Slide 42

Slide 42 text

Mount & Blade PySol

Slide 43

Slide 43 text

Inkscape Poser

Slide 44

Slide 44 text

Solar Wolf Snake Worlds

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

Obrigado!!!