2. 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".
3. 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.
4.
5.
6.
7. Alguns Aspectos Técnicos
Multiplataforma
Interpretada
Geração Transparente de BYTECODE
Extensível
De Propósito Geral
9. Filosofia
Liberdade para usar
Liberdade para redistribuir
Liberdade para modificar
Liberdade para distribuir as modificações
10. 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
11. 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. """
12. 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'
13. 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
14. 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"}
15. Introdução à Sintaxe
Mé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]
16. Introdução à Sintaxe
Mé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']
17. Introdução à Sintaxe
Atribuição
a = 5
b = “Banana”
a += 6
b *= 2
print a, b
11 “bananabanana”
a, b, c = 1, 2, 3
a->1; b-> 2; c-> 3
Os tipos são definidos dinamicamente, e não há
necessidade de se declarar previamente uma variável.
18. Introdução à Sintaxe
Controle 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".
19. Introdução à Sintaxe
Controle de Fluxo
- for – exemplos:
nome = "João"
for letra in nome:
print letra
j = 0
for i in range (0, 150):
j += i
20. Introdução à Sintaxe
Controle de Fluxo
- while – exemplo:
a = False
while not a:
#executa tarefas
nome = le_nome_do_banco_de_dados()
if nome == 'fim':
a = True
21. Introdução à Sintaxe
Controle de Fluxo
- try - except – exemplo:
a = raw_input (“digite um número”)
try:
b = 10.0 / a
except:
print “Você não digitou um número válido para
divisor”
else:
print “O resultado é %d” % b
22. Introdução à Sintaxe
Funções:
- Exemplos:
def quadrado (a):
return a * a
def junta_palavras (*palavras):
resultado = “”
for palavra in palavras:
resultado += palavra
return resultado
23. Introdução à Sintaxe
Funções:
- Exemplo:
from math import log
def 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 moveton” % (x,y)
result += “%d 0 rlineton0 %d rlineton” % (w,h)
result += “%d 0 rlineton0 %d rlineton” % (-w,-h)
result += “stroken”
return result
24. 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
25. 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
26. Orientação a Objeto
Exemplo:
import math
class Ponto(object):
def __init__(self, x=0, y=0):
self.x = x
self.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)
27. Orientação a Objeto
Herança - Exemplo
import math
class Pessoa(object):
def __init__(self, nome=””, email=””):
self.nome = nome
self.email = email
class Vendedor (Pessoa):
def __init__ (self, nome=””, email=””, numero=0,
comissao=0.0):
self.numero = numero
self.comissao = comissao
Pessoa.__init__ (self, nome, email)
28. Orientação a Objeto
Herança - Exemplo
import math
class cliente (Pessoa):
def __init__ (self, nome=””, email=””, tel=””,
empresa=””):
self.tel=tel
self.empresa = empresa
Pessoa.__init__ (self, nome, email)
29. Orientação a Objeto
Herança - Exemplo
class My_int (int):
def __add__ (self, fator):
return self - fator
b = My_int (10)
print b
10
print b - 3
7
print b + 3
7
30. Orientação a Objeto
Heranç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”.
31. 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 do
módulo “entidades” não se confundem
com variáveis locais.
32. 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
33. 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.
34. 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 diferentes
Exemplos:
os.unlink
os.chdir
os.path.sep
35. Módulos Padrão
O módulo “sys” contém recursos do ambiente em
que o programa é executado
Exemplos:
sys.path
sys.argv
sys.stdin
36. 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
38. Documentação
O 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.
39. Documentação
Com 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 2080
firefox http://localhost:2080
40. Outros Módulos
Mó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í.
41. Interface Gráfica
O 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
42. Interface Gráfica
Exemplo de Tkinter:
from Tkinter import *
root = Tk()
w = Label(root, text="Hello, world!")
w.pack()
root.mainloop()
43. Interface Gráfica
PyGTK é 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.
45. Interface Gráfica
PyQT é 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.
46. Interface Gráfica
Exemplo 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()
47. Multimídia
O 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.
48. Multimídia
Exemplo de Pygame
from pygame import *
from time import sleep
display.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()
49. 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.
50. Aspectos Técnicos
Integrando com outras linguagens: C
Alguns 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.
51. Aspectos Técnicos
Integrando com outras linguagens: C
Alternativamente, 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.
52. Aspectos Técnicos
Integrando com outras linguagens: JAVA
O 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.
53. 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
54. 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)
.