Palestra python

55
APRESENTANDO João S. O. Bueno Calligaris PÍON Informática

Transcript of Palestra python

Page 1: Palestra python

APRESENTANDO

João S. O. Bueno CalligarisPÍON Informática

Page 2: Palestra python

Visão Geral e Aspectos Históricos

Criada em 1990

Criador: Guido van Rossum – atual BDFL

do Stichting Mathematisch Centrum (CWI ) na Holanda,

Alternativa à linguagem "ABC" que é uma alternativa ao "BASIC".

Page 3: Palestra python

Visão Geral e Aspectos Históricos

O nome vem do programa de humor "Monty Python Flying Circus", programa de TV do grupo de humoristas inglês.

Tornou-se comum o uso de cobras como mascotes, embora na origem a linguagem nada tivesse a ver com "python" como cobra.

Page 4: Palestra python
Page 5: Palestra python
Page 6: Palestra python
Page 7: Palestra python

Alguns Aspectos Técnicos

Multiplataforma

Interpretada

Geração Transparente de BYTECODE

Extensível

De Propósito Geral

Page 8: Palestra python

Filosofia

SEMPRE FOI SOFTWARE LIVRE

Page 9: Palestra python

Filosofia

Liberdade para usar

Liberdade para redistribuir

Liberdade para modificar

Liberdade para distribuir as modificações

Page 10: Palestra python

Exemplo de Programa#!/usr/bin/python # -*- coding: iso-8859-1 -*- from math import sqrt def eh_primo (numero): """eh_primo (numero) -> boolean Verifica se um número é primo ou não. """ for i in xrange (2, int (sqrt(numero) + 1)): if not numero % i: return False return True a = int (raw_input ("Digite um número:")) if eh_primo (a): print "%d é primo." %a else: print "%d não é primo" %a

Page 11: Palestra python

Introdução à Sintaxe - Tabulação para definir blocos - Tipos de dados

- inteiros, inteiros longos, ponto flutuante e complexos - 4, 232 , 239, 040, 0x20

- 10 **100 - 3.141592 - 0 + 1j

- Booleanos: - False, True -Strings,

- 'João' - "Tiago"

- """Este estudo tem por objetivo comprovar as relações de vôo, em total de milhas percorridas, entre as andorinhas Africana e Européia. A partir, pode-se inferir por meios estatísticos a viabilidade ou não do transporte de cocos inteiros por tais aves. """

Page 12: Palestra python

Introdução à Sintaxe- listas e tuplas

- [0, 1, 2] - ["Maçã", "Melão", "Banana", "Laranja","Morango"]

- [23, "Maçã", 5 + 42j, elefante] - (0, 23, 72)

- Acesso a fatias de strings, listas e tuplas:

- a = "Camelot é um lugar idiota" - a [0:7] -> "Camelot"

- a [7:] -> "é um lugar idiota" - a [-3:] -> "ota" - b = ["Rei", "Graal", "Cavaleiro Negro", "Cena 24"] - b[0] -> "Rei" - b[1:2] -> ["Graal", "Cavaleiro Negro"] - b[1][1] -> 'G'

Page 13: Palestra python

Introdução à Sintaxe- dicionários.

- frutas = {"Laranja": 34, "Abacaxi": "Está em falta", "Kiwi": 56}

- frutas ["Morango"] = 357

- Os módulos de acesso a bancos de dados permitem que os campos sejam lidos como um dicionário

Page 14: Palestra python

Introdução à Sintaxe- Operadores numéricos:

- +, -, /, *, **, %, >>, <<, |, & - 5 + 4 * 5**2 -> 105

- Operadores com strings: - "+", "*" - "maçã" + "limão" -> "maçãlimão" - "pessego" * 3 -> 'pessegopessegopessego' - Também funcionam em listas

- % funciona como o "printf" do C, em qualquer string: - "Meu nome é %s, e tenho %d anos." % ("Marcelo", 23) - "Sr. %(nome)s, residente à %(endereco)s %(numero)d" %

{"nome": "Luiz de Oliveira", "numero" : 42, "endereco": "Rua dos bobos"}

Page 15: Palestra python

Introdução à SintaxeMétodos:

- Tudo em python é um objeto. Objetos possuem métodos, alguns dos quais podem ser chamados diretamente.

EXEMPLOS: - string.upper:

- "Morango".upper() -> 'MORANGO' - list.sort

- a = [4 ,3 ,2 ,1] - a .sort(); a -> [1, 2, 3, 4]

Page 16: Palestra python

Introdução à SintaxeMétodos:

-- Todos os métodos, e propriedades de uma classe podem ser visualizados com a função embutida “dir”

>>> dir (str)['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__str__', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'replace', 'rfind', 'rindex', 'rjust', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

Page 17: Palestra python

Introdução à SintaxeAtribuição

a = 5b = “Banana”a += 6b *= 2print a, b11 “bananabanana”

a, b, c = 1, 2, 3a->1; b-> 2; c-> 3

Os tipos são definidos dinamicamente, e não há necessidade de se declarar previamente uma variável.

Page 18: Palestra python

Introdução à SintaxeControle de Fluxo

- If, elif, else – exemplo:

a = raw_input ("Nome : ") if a == "Marcelo": print "Você não é bem vindo aqui" elif a == "João": print "Sinta-se a vontade" else: print "Aguarde a autenticação".

Page 19: Palestra python

Introdução à SintaxeControle de Fluxo

- for – exemplos:

nome = "João" for letra in nome:

print letra

j = 0 for i in range (0, 150):

j += i

Page 20: Palestra python

Introdução à SintaxeControle de Fluxo

- while – exemplo:

a = Falsewhile not a:

#executa tarefasnome = le_nome_do_banco_de_dados()if nome == 'fim':

a = True

Page 21: Palestra python

Introdução à SintaxeControle de Fluxo

- try - except – exemplo:

a = raw_input (“digite um número”)try:

b = 10.0 / aexcept:

print “Você não digitou um número válido para divisor”else:

print “O resultado é %d” % b

Page 22: Palestra python

Introdução à SintaxeFunções:

- Exemplos:

def quadrado (a): return a * a

def junta_palavras (*palavras): resultado = “” for palavra in palavras: resultado += palavra return resultado

Page 23: Palestra python

Introdução à SintaxeFunções:

- Exemplo:

from math import logdef retangulo (x=0, y=0, w=0, h=0, color=(0,0,0)):

“””Retorna string para desenhar um retângulo em postscript “””

result = “%d %d moveto\n” % (x,y)result += “%d 0 rlineto\n0 %d rlineto\n” % (w,h)result += “%d 0 rlineto\n0 %d rlineto\n” % (-w,-h)result += “stroke\n” return result

Page 24: Palestra python

Exemplo de Programa#!/usr/bin/python # -*- coding: iso-8859-1 -*- from math import sqrt def eh_primo (numero): """eh_primo (numero) -> boolean Verifica se um número é primo ou não. """ for i in xrange (2, int (sqrt(numero) + 1)): if not numero % i: return False return True a = int (raw_input ("Digite um número:")) if eh_primo (a): print "%d é primo." %a else: print "%d não é primo" %a

Page 25: Palestra python

Orientação a Objeto

Um objeto é um conjunto de dados com funções associadas Esses dados e funções estão estruturados de acordo com a informação contida na “classe” a que esse objeto pertence As funções são chamadas de “métodos” do objeto, e os dados de “propriedades” Em Python, tudo é um objeto

Page 26: Palestra python

Orientação a ObjetoExemplo:import mathclass Ponto(object):

def __init__(self, x=0, y=0):self.x = xself.y = y

def distancia (self, ponto_2):return math.sqrt ((ponto_2.x – self.x) ** 2

+ (ponto_2.y – self.y) ** 2)

p0 = Ponto()p1 = Ponto (3,4)print p1.distancia (p0)

Page 27: Palestra python

Orientação a ObjetoHerança - Exemploimport mathclass Pessoa(object):

def __init__(self, nome=””, email=””):self.nome = nomeself.email = email

class Vendedor (Pessoa):def __init__ (self, nome=””, email=””, numero=0,

comissao=0.0):self.numero = numeroself.comissao = comissaoPessoa.__init__ (self, nome, email)

Page 28: Palestra python

Orientação a ObjetoHerança - Exemploimport mathclass cliente (Pessoa):

def __init__ (self, nome=””, email=””, tel=””, empresa=””):

self.tel=telself.empresa = empresaPessoa.__init__ (self, nome, email)

Page 29: Palestra python

Orientação a ObjetoHerança - Exemplo

class My_int (int):def __add__ (self, fator):

return self - fatorb = My_int (10)print b10print b - 37print b + 37

Page 30: Palestra python

Orientação a ObjetoHerança Múltipla - Exemplo

class Cliente (Empresa, Pessoa):pass

Se houverem métodos com o mesmo nome nas classes Empresa e Pessoa, os da classe Empresa serão usados por que ela está antes na lista de “ancestrais”.

Page 31: Palestra python

Módulos

Pode-se definir várias classes correlatas num arquivo .py qualquer, e usa-las após importar esse arquivo, que então se torna um “módulo”.

import entidades

p = entidades.Cliente ()p2 = entidades.Empresa ()

Desta forma, nomes definidos dentro domódulo “entidades” não se confundemcom variáveis locais.

Page 32: Palestra python

Módulos

Opcionalmente, em programas mais simples, ou quando vai se usar somente um sub-módulo, os conteúdos de um módulo podem ser jogados no escopo local:

from math import *from sys import argv

import pygame.display as disp

Page 33: Palestra python

Módulos Padrão

A instalação do Python é acompanhada de dezenas de módulos com todo tipo de funcionalidade.

De funções matemáticas, protocolos de internet, e até banco de dados simples, além de muitos facilitadores.

Page 34: Palestra python

Módulos Padrão

O módulo “os” contém funções para manipular o sistema de arquivos, e algumas constantes para assegurar a operação entre plataformas diferentesExemplos:

os.unlinkos.chdiros.path.sep

Page 35: Palestra python

Módulos Padrão

O módulo “sys” contém recursos do ambiente em que o programa é executado

Exemplos:

sys.pathsys.argvsys.stdin

Page 36: Palestra python

Módulos Padrão

O módulo “math” como já visto, contém funções matemáticas que vão além das 4 operações básicas, tais com funções trigonométricas, logarítmicas, etc...

Para matemática mais elaborada, como cálculo numérico com matrizes, ou cálculo simbólico, deve se usar módulos de terceiros, também disponíveis,como SCIPY ou NUMERIC

Page 37: Palestra python

Módulos Padrão – todos__builtin__ __future__ __main__ _winreg (Windows) aepack (Mac) aetools (Mac) aetypes

(Mac) aifc AL (IRIX) al (IRIX) anydbm applesingle (Mac) array asynchat asyncore atexit audioop autoGIL (Mac) base64 BaseHTTPServer Bastion binascii binhex bisect bsddb (Unix, Windows) buildtools (Mac) bz2 calendar Carbon.AE (Mac) Carbon.AH (Mac) Carbon.App (Mac) Carbon.CaronEvt (Mac) Carbon.CF (Mac) Carbon.CG (Mac) Carbon.Cm

(Mac) Carbon.Ctl (Mac) Carbon.Dlg (Mac) Carbon.Evt (Mac) Carbon.Fm (Mac) Carbon.Folder (Mac) Carbon.Help (Mac) Carbon.List (Mac) Carbon.Menu (Mac)

Carbon.Mlte (Mac) Carbon.Qd (Mac) Carbon.Qdoffs (Mac) Carbon.Qt (Mac) Carbon.Res(Mac) Carbon.Scrap (Mac) Carbon.Snd (Mac) Carbon.TE (Mac) Carbon.Win (Mac) cd (IRIX) cfmfile (Mac) cgi CGIHTTPServer cgitb chunk cmath cmd code codecs codeop collections

ColorPicker (Mac) colorsys commands (Unix) compileall compiler compiler.ast compiler.visitor ConfigParser Cookie cookielib copy copy_reg cPickle crypt (Unix)

cStringIO csv curses curses.ascii curses.panel curses.textpad curses.wrapper datetime dbhash (Unix, Windows) dbm (Unix) decimal DEVICE (IRIX) difflib dircache dis distutils

distutils.archive_util distutils.bcppcompiler distutils.ccompiler distutils.cmd distutils.command distutils.command.bdist distutils.command.bdist_dumb

distutils.command.bdist_packager distutils.command.bdist_rpm distutils.command.bdist_wininst distutils.command.build distutils.command.build_clib

distutils.command.build_ext distutils.command.build_py distutils.command.build_scripts distutils.command.clean distutils.command.config distutils.command.install

distutils.command.install_data distutils.command.install_headers distutils.command.install_lib distutils.command.install_scripts distutils.command.register

distutils.command.sdist distutils.core distutils.cygwinccompiler distutils.debug distutils.dep_util distutils.dir_util distutils.dist distutils.emxccompiler distutils.errors distutils.extension distutils.fancy_getopt distutils.file_util distutils.filelist distutils.log

distutils.msvccompiler distutils.mwerkscompiler distutils.spawn distutils.sysconfig distutils.text_file distutils.unixccompiler distutils.util distutils.version dl (Unix) doctest

Page 38: Palestra python

DocumentaçãoO modo interativo dispõe da função HELP que exibe as strings de documentação (Docstring) de um módulo, classe ou função.Exemplo:help (os.listdir)Help on built-in function listdir:listdir(...) listdir(path) -> list_of_strings

Return a list containing the names of the entries in the directory.

path: path of directory to list

The list is in arbitrary order. It does not include the special entries '.' and '..' even if they are present in the directory.

Page 39: Palestra python

DocumentaçãoCom o python é fornecido um programa separado – o Pydoc – que pode listar todos os módulos instalados no sistema, e o conteúdo e strings de ajuda de cada módulo.

Um dos modos de operação do pydoc é a criação de um servidor http numa porta específicada. Então a documentação pode ser vista através da URL http://localhost:porta

pydoc -p 2080firefox http://localhost:2080

Page 40: Palestra python

Outros MódulosMódulos que trabalham com bibliotecas desenvolvidas por terceiros, por mais universal que seja sua presença, não fazem parte da instalação padrão do Python.

Em sua maioria, estão listados em http://www.python.org/pypi, e incluem módulos para acesso a bases de dados livres e proprietárias, computação científica, multimídia e outros.

Há mais de 400 módulos listados aí.

Page 41: Palestra python

Interface GráficaO módulo que fornece uma interface gráfica que acompanha o python é o Tkinter.

Ele é fácil de usar, mas a sintaxe de suas funções é por vezes pouco “pythonica”, por herdar muita coisa do TCL. Por ser mais antigo, a aparência de janelas criadas com o Tkinter pode parecer pobre.

É software livre, leve, funciona bem em ambiente Windows e X11

Page 42: Palestra python

Interface GráficaExemplo de Tkinter:

from Tkinter import *

root = Tk()

w = Label(root, text="Hello, world!")w.pack()

root.mainloop()

Page 43: Palestra python

Interface GráficaPyGTK é o módulo que dá acesso à GTK “the GIMP Tool Kit”. Ë muito mais completa que o Tkinter, funciona bem em windows e X11, mas não acompanha o Python, devendo ser instalada separadamente.

Sua programação é um pouco mais complexa.

Como é o toolkit padrão do ambiente Gnome, aplicativos desenvolvidos em PyGTK se integram totalmente com esse ambiente.

Page 44: Palestra python

Interface GráficaExemplo de PyGTK

from gtk import *

window = GtkWindow(WINDOW_TOPLEVEL)window.set_border_width(10)

button = GtkButton("Hello, World!")window.add(button)button.show()

window.show()

mainloop()

Page 45: Palestra python

Interface GráficaPyQT é o módulo, de terceiros, que faz a ligação com a biblioteca 'QT'- padrão do KDE. É muito completa, e mais fácil de programar que as anteriores. Conta no entanto, com a desvantagem de não ser software livre para Windows, até a versão atual. (Os desenvolvedores já anunciaram que a próxima versão – QT 4 – será disponibilizada sob a GPL para Windows também).

Atualmente, a PyQT é mantida pelo projeto KDE.

Page 46: Palestra python

Interface GráficaExemplo de PyQT

import sys from qt import *

a = QApplication(sys.argv) hello = QPushButton("Hello world!",None) hello.resize(100,30) a.setMainWidget(hello) hello.show()

a.exec_loop()

Page 47: Palestra python

MultimídiaO módulo “pygame” provê a funcionalidade do SDL para o python. Uma biblioteca multiplataforma, para acesso direto ao vídeo e ao som, torna simples o desenvolvimento de aplicativos gráficos, de áudio e mesmo para reproduzir vídeo.

Page 48: Palestra python

MultimídiaExemplo de Pygame

from pygame import *from time import sleepdisplay.init()surf = display.set_mode ((800,600))display.toggle_fullscreen()

pygame.draw.rect (surf, 0x0000ff, (100,100, 300, 200))display.flip()sleep (5)display.toggle_fullscreen()display.quit()

Page 49: Palestra python

Aspectos Técnicos

Python compila dinamicamente os programas para bytecode. Se um programa é importado como módulo, o seu bytecode pré compilado é salvo de forma transparente na forma de um arquivo “.pyc”

Em geral, recomenda-se que se trabalhe com versões de código aberto dos programas – mesmo que sejam distribuidos só o bytecode de um software, não é difícil “descompilar” o programa Python.

Page 50: Palestra python

Aspectos Técnicos

Integrando com outras linguagens: CAlguns dos módulos de python são apenas uma fina “camada” de código para que o python possa enxergar uma biblioteca escrita em “C”.

Dessa forma, optem-se quase a mesma performance que uma aplicação em C teria, mesmo para tarefas que usem muitos recursos, como edição de vídeo, escrevendo-se uma fração do código que seria necessário para a mesma funcionalidade em C.

Page 51: Palestra python

Aspectos Técnicos

Integrando com outras linguagens: CAlternativamente, o software “pyrex” permite que se escreva código que se assemelha a uma extensão do Python, onde se pode explicitar que variáveis/funções serão nativas do python, e quais serão nativas em C.

Dessa forma, escrevendo-se praticamente só em python, pode se ganhar performance em áreas de processamento mais intenso, fazendo-se uso de estruturas nativas do C.

Page 52: Palestra python

Aspectos Técnicos

Integrando com outras linguagens: JAVAO próprio site oficial do Python provê um interpretador alternativo – o Jython, que compila os scripts Python para bytecode JAVA. Um aplicativo que use o Jython pode importar qualquer classe do Java, e usar sua extensa API, sem penalidades, com a vantagem do menor tempo de desenvolvimento inerente ao Python.

Page 53: Palestra python

Embutindo Python

Python foi desenhado de forma que seja fácil adicionar a programas em C a capacidade de executarem “plug-ins” escritos em python.

Dada a facilidade para escrever e manter código, isso propicia muita flexibilidade para esses programas.

As informações necessárias para se embutir um interpretador python em outro programa constam do próprio site do python.

Alguns programas que possuem extensão em python: GIMP, Blender e Gnumeric

Page 54: Palestra python

Embutindo Python

Exemplo de Script para o GIMP:from gimpfu import * def center_layer (img, drw): x = (img.width - drw.width) / 2 y = (img.height - drw.height) / 2 pdb.gimp_layer_set_offsets (drw, x, y) pdb.gimp_displays_flush () register( "center_layer", "Centers Current Layer on Canvas", "enters Current Layer on Canvas", "Joao S. O. Bueno", "(k) All rites reversed - JS", "2004", "<Image>/Python-Fu/center-layer", "*", [], [], center_layer)

.