python para zope
TRANSCRIPT
-
8/14/2019 Python Para Zope
1/67
Introduo
linguagemPython
Luciano [email protected]
Um resumo especial paraquem est estudando o Zope
-
8/14/2019 Python Para Zope
2/67
Compilada ou interpretada?
O interpretador Python pode rodarscripts em cdigo-fonte ( .py ) oucompilados para byte-code ( .pyc ).
Ao ler um arquivo .py o interpretadorprimeiro gera os byte-codes em memria,depois executa os byte-codes.
Ao importar um mdulo .py , ointerpretador salva a verso compiladano mesmo local, se tiver permisso.
-
8/14/2019 Python Para Zope
3/67
-
8/14/2019 Python Para Zope
4/67
Primeiro programa
A primeira linha d acesso classedatetime do mdulo datetime A segunda linha utiliza o comando print
para exibir a data e a hora no console
from datetime import datetimeprint datetime.now()
-
8/14/2019 Python Para Zope
5/67
Anlise sinttica do Programa 1
No se usa ; para separar linhas from/import e print so comandos now um mtodo da classe datetime do
mdulo datetime
from datetime import datetimeprint datetime.now()
-
8/14/2019 Python Para Zope
6/67
Voc pode digit-lo interativamente noconsole do Python:
Voc pode digit-lo num arquivo texto,
salvar e depois executar o arquivo assim:
Como rodar o Programa 1
$ python>>> from datetime import datetime>>> print datetime.now()2005-12-28 12:23:58.812149
$ python agora.py2005-12-28 12:27:05.273744
-
8/14/2019 Python Para Zope
7/67
Programa 2: relogio.py
Como este j tem vrias linhas, maisfcil salvar num arquivo e executar O comentrio mgico na linha 1 permite
que este rode como um executvel para isso preciso usar o comando chmod
no shell do Linux
#!/usr/bin/env python
from time import localtime, strftime, sleepwhile True: # rodar para sempre print strftime('%H:%M:%S',localtime())
sleep(1) # aguardar 1 segundo
-
8/14/2019 Python Para Zope
8/67
Anlise sinttica de relogio.py
O sinal # indica um comentrio O comando import aceita vrios smbolos
separados por ,
O bloco do comando while marcado pelaindentao (4 espaos por conveno)
#!/usr/bin/env python
from time import localtime, strftime, sleepwhile True: # rodar para sempre print strftime('%H:%M:%S',localtime())
sleep(1) # aguardar 1 segundo
-
8/14/2019 Python Para Zope
9/67
Sintaxe de blocos de comandos
for i in range(1,11) :
j = i*iprint i, jprint 'FIM'
dois-pontos marcao incio do bloco
retorno ao nvel anterior deindentao marca o final do bloco
indentao dentrodo bloco deve serconstante*
* por conveno, usa-se 4 espaos por nvel (mas basta ser consistente)
-
8/14/2019 Python Para Zope
10/67
Blocos de comandos
Todos os comandos que aceitam blocos:
Se o bloco tem apenas um comando,pode-se escrever tudo em uma linha:
if/elif/else for/else
while/else
try/except try/finally
class def
if n < 0: print 'Valor invlido'
-
8/14/2019 Python Para Zope
11/67
Comentrios
O smbolo # indica que o texto partirdaquele ponto e at o final da linha deveser ignorado pelo interpretador python
exceto quando # aparece numa string Para comentrios de vrias linhas, usa-se
trs aspas simples ou duplas (isso criauma doc string e no ignorada pelo
python , mas usada para documentar)""" Minha terra tem palmeiras,
Onde canta o Sabi;As aves, que aqui gorjeiam,
No gorjeiam como l. """
-
8/14/2019 Python Para Zope
12/67
Tipos de dados primitivos
Nmeros inteiros, inteiros longos, ponto-flutuante,complexos
Strings de 8 bits e Unicode
Listas e tuplas Dicionrios Arquivos True, False e None
-
8/14/2019 Python Para Zope
13/67
Nmeros inteiros
int : usualmente inteiros de 32 bits long : alcance limitado apenas pela
memria
ATENO: a diviso entreinteiros sempre retornaoutro inteiro
Python promovede int para long automaticamente
>>> 1 / 20>>> 1. / 20.5
>>> 2**30 + (2**30-1)2147483647>>> 2**312147483648L
-
8/14/2019 Python Para Zope
14/67
Outros nmeros
float : ponto-flutuante de 32 bits complex : nmero complexo Construtores ou
funes de converso: int(a) long(b) float(c) complex(d) abs(e)
>>> c = 4 + 3j>>> abs(c)5.0>>> c.real4.0>>> c.imag3.0
-
8/14/2019 Python Para Zope
15/67
Operadores numricos
Aritmticos bsicos: + - * / ** (o ltimo: potenciao) aritmtica de inteiros: % // (resto e diviso)
Bit a bit: & | ^ ~ >>
-
8/14/2019 Python Para Zope
16/67
Booleanos
Valores: True , False outros valores: converso automtica Converso explcita: bool(x)
>>> bool(3)True
>>> bool('0')True
>>> bool([[]])True
>>> bool(0)False
>>> bool('')False
>>> bool([])False
-
8/14/2019 Python Para Zope
17/67
Operadores booleanos
Operadores relacionais == != > >= <
-
8/14/2019 Python Para Zope
18/67
Atribuio Forma simples
reais = euros * taxa Outras formas
atribuio com operao a+=10 # a=a+10
atribuio mltipla x=y=z=0
atribuio posicional itens de sequncias a,b,c=lista i,j=j,i # swap
-
8/14/2019 Python Para Zope
19/67
Atribuio Exemplo
# Srie de Fibonacci
a = b = 1while True:
print a
a, b = b, a + b
-
8/14/2019 Python Para Zope
20/67
Atribuio: princpios Python trabalha com referncias, portanto
a atribuio no gera uma cpia do objeto Uma varivel no uma caixa que contm um
valor (esquea esta velha idia!) Uma varivel uma etiqueta Post-it colada a
um objeto (adote esta nova idia!!!) del : comando de desatribuio
remove uma referncia ao objeto no existindo mais referncias, o objeto
varrido da memria
-
8/14/2019 Python Para Zope
21/67
Variveis Podem ser entendidas como rtulos
no so "caixas que contm valores" Atribuir valor varivel equivale a colar
um rtulo no valora = [1,2,3]; b = a
[1,2,3]
a
[1,2,3]
a b
-
8/14/2019 Python Para Zope
22/67
-
8/14/2019 Python Para Zope
23/67
-
8/14/2019 Python Para Zope
24/67
Palavras reservadas and assert break
class continue def del
elif else except
exec finally for from
global if import
in is lambda not
or pass print
raise return try while yield
-
8/14/2019 Python Para Zope
25/67
Strings str : cada caractere um byte;
acentuao depende do encoding strings podem
ser delimitadaspor:
aspas simples ouduplas: 'x', "x"
trs aspassimples ouduplas:'''x''', """x"""
>>> fruta = 'ma'>>> fruta'ma\xc3\xa7\xc3\xa3'>>> print frutama>>> print repr(fruta)'ma\xc3\xa7\xc3\xa3'>>> print str(fruta)ma>>> len(fruta)6
-
8/14/2019 Python Para Zope
26/67
-
8/14/2019 Python Para Zope
27/67
Conversao entre str e unicode De str para unicode :
u = s.decode('iso-8859-15') De unicode para str :
s2 = u.encode('utf-8') O argumento de ambos mtodos uma
string especifcando a codificao a serusada
-
8/14/2019 Python Para Zope
28/67
Codificaes comuns no Brasil iso-8859-1: padro ISO Latin-1 iso-8859-15: idem, com smbolo (Euro) cp1252: MS Windows codepage 1252
ISO Latin-1 aumentado com caracteresusados em editorao eletrnica ( ) utf-8: Unicode codificado em 8 bits
compatvel com ASCII at o cdigo 127 utiliza 2 bytes para caracteres no-ASCII este o padro recomendado pelo W3C, para
onde todas os sistemas esto migrando
-
8/14/2019 Python Para Zope
29/67
-
8/14/2019 Python Para Zope
30/67
Codificao em scripts (2) Exemplo:
Resultado:
# -*- coding: iso-8859-15 -*-
euro_iso = ''print '%x' % ord(euro_iso)euro_unicode = u''print '%x' % ord(euro_unicode)
a420ac
Como gerar strings com
-
8/14/2019 Python Para Zope
31/67
Como gerar strings comvariveis embutidas
Operador de interpolao: f % tupla
Tipos de converso mais comuns:
%s, %f, %d : string, float, inteiro decimal Aprendendo a aprender:
Google: Python String Formatting Operations
>>> m = 'Euro'>>> t = 2.7383>>> f = 'O %s est cotado a R$ %0.2f.'
>>> print f % (m,t)O Euro est cotado a R$ 2.74.
l f
-
8/14/2019 Python Para Zope
32/67
Algumas funes com strings chr(n): retorna uma string com um
caractere de 8-bits cujo cdigo n unichr(n): retorna uma string com um
caractere Unicode cujo cdigo n ord(c) : retorna o cdigo numrico do
caractere c (pode ser Unicode) repr(x) : converso de objeto para sua
representao explcita em Python len(s) : nmero de caracteres da string
Al d d i
-
8/14/2019 Python Para Zope
33/67
Alguns mtodos de strings s.strip()
retira os brancos (espaos, tabs e newlines)da frente e de trs de s (+ parmetros)
rstrip e lstrip retiram direita e esquerda s.upper(), s.lower(), s.capitalize()
converte todas maisculas, todasminsculas, primeira maiscula por palavra
s.isdigit(), s.isalnum(), s.islower()... testa se a string contm somente dgitos, ou
somente dgitos e letras ou s minsculas
B d b i
-
8/14/2019 Python Para Zope
34/67
Buscando substrings sub in s
s contm sub? s.startswith(sub), s.endswith(sub)
s comea ou termina com sub? s.find(sub), s.index(sub)
posio de sub em s (se sub no existe em s ,find retorna -1, index sinaliza ValueError )
rfind e rindex comeam pela direita s.replace(sub1, sub2)
substitui as ocorrncias de sub1 por sub2
A d d d
-
8/14/2019 Python Para Zope
35/67
Aprendendo a aprender Determinar o tipo de um objeto:
type(obj) Ver docs de uma classe ou comando
help(list) Obter uma lista de (quase) todos os
atributos de um objeto dir(list)
Listar smbolos do escopo corrente dir()
Li t
-
8/14/2019 Python Para Zope
36/67
Listas Listas so colees de itens
heterogneos que podem ser acessadossequencialmente ou diretamente atravsde um ndice numrico.
Constantes do tipo lista so delimitadaspor colchetes []
a = []
b = [1,10,7,5] c = ['casa',43,b,[9,8,7],u'coisa']
Li t
-
8/14/2019 Python Para Zope
37/67
Listas Funo primitiva len() retorna o
nmero de itens da lista: len(a), len(b), len(c) # 0, 4, ?
O mtodo lista.sort() ordena os itensde forma ascendente e lista.reverse() inverte a ordem dos itens dentro da lista.
O it d li t
-
8/14/2019 Python Para Zope
38/67
Operaes com itens de listas Atribuio
lista[5] = 123 Outros mtodos da classe list
lista.insert(posicao, elemento) lista.pop() # +params: ver doc lista.index(elemento) # +params: ver doc lista.remove(elemento)
Remoo do item del lista[3]
Uma funo para gerar listas
-
8/14/2019 Python Para Zope
39/67
Uma funo para gerar listas range( [inicio,] fim[, passo] )
Retorna uma progresso aritmtica de acordocom os argumentos fornecidos
Exemplos: range(8) # [0,1,2,3,4,5,6,7] range(1,7) # [1,2,3,4,5,6] range(1,8,3) # [1,4,7]
Expresses para gerar listas
-
8/14/2019 Python Para Zope
40/67
Expresses para gerar listas "List comprehensions" geram listas a
partir de outras listas Economizam loops explcitos Exemplo de sintaxe bsica:
>>> [x *.5 for x in range(6)][0.0, 0.5, 1.0, 1.5, 2.0, 2.5]
Exemplo de sintaxe com filtro:>>> [x *.5 for x in range(6) if x != 3][0.0, 0.5, 1.0, 2.0, 2.5]
Produto cartesiano
-
8/14/2019 Python Para Zope
41/67
Produto cartesiano Usando dois ou mais comandos for
dentro de uma list comprehension
>>> qtds = [2,6,12,24]>>> frutas = ['abacaxis', 'bananas', 'caquis']
>>> [(q,f) for q in qtds for f in frutas][(2, 'abacaxis'), (2, 'bananas'), (2, 'caquis'),(6, 'abacaxis'), (6, 'bananas'), (6, 'caquis'),(12,'abacaxis'), (12,'bananas'), (12,'caquis'),(24,'abacaxis'), (24,'bananas'), (24,'caquis')]
Produto cartesiano (2)
-
8/14/2019 Python Para Zope
42/67
Produto cartesiano (2)>>> naipes = 'copas ouros espadas paus'.split()>>> cartas = 'A 2 3 4 5 6 7 8 9 10 J Q K'.split()>>> baralho = [ (c, n) for n in naipes for c in cartas]>>> baralho[('A', 'copas'), ('2', 'copas'), ('3', 'copas'), ('4', 'copas'),
('5', 'copas'), ('6', 'copas'), ('7', 'copas'), ('8', 'copas'),('9', 'copas'), ('10', 'copas'), ('J', 'copas'), ('Q', 'copas'),('K', 'copas'), ('A', 'ouros'), ('2', 'ouros'), ('3', 'ouros'),
('4', 'ouros'), ('5', 'ouros'), ('6', 'ouros'), ('7', 'ouros'),('8', 'ouros'), ('9', 'ouros'), ('10', 'ouros'), ('J', 'ouros'),('Q', 'ouros'), ('K', 'ouros'), ('A', 'espadas'), ('2', 'espadas'),('3', 'espadas'), ('4', 'espadas'), ('5', 'espadas'),('6', 'espadas'), ('7', 'espadas'), ('8', 'espadas'),('9', 'espadas'), ('10', 'espadas'), ('J', 'espadas'),('Q', 'espadas'), ('K', 'espadas'), ('A', 'paus'), ('2', 'paus'),('3', 'paus'), ('4', 'paus'), ('5', 'paus'), ('6', 'paus'),('7', 'paus'), ('8', 'paus'), ('9', 'paus'), ('10', 'paus'),('J', 'paus'), ('Q', 'paus'), ('K', 'paus')]
>>> len(baralho)52
Tuplas
-
8/14/2019 Python Para Zope
43/67
Tuplas Tuplas so sequncias imutveis
no possvel modificar as refernciascontidas na tupla
Tuplas constantes so representadas
como sequncias de itens entreparenteses
em certos contextos os parenteses em redordas tuplas podem ser omitidos
>>> t1 = 1, 3, 5, 7>>> t1(1, 3, 5, 7)
a, b = b, a
Converses entre listas e strings
-
8/14/2019 Python Para Zope
44/67
Converses entre listas e strings s.split([sep[,max]])
retorna uma lista de strings, quebrando s nos brancos ou no separador fornecido
max limita o nmero de quebras s.join(l)
retorna todas as strings contidas na lista l "coladas" com a string s ( comum que s sejauma string vazia)
list(s) retorna s como uma lista de caracteres
''.join(l)
Tuplas
-
8/14/2019 Python Para Zope
45/67
Tuplas Atribuies mltiplas utilizam tuplas
#uma lista de duplasposicoes = [(1,2),(2,2),(5,2),(0,3)]
#um jeito de percorrerfor pos in posicoes:i, j = posprint i, j
#outro jeito de percorrerfor i, j in posicoes:
print i, j
-
8/14/2019 Python Para Zope
46/67
Fatiamento de sequncias
-
8/14/2019 Python Para Zope
47/67
Fatiamento de sequncias s[a:b] cpia de a (inclusive) at
b (exclusive) s[a:] cpia a partir de a (inclusive) s[:b] cpia at b (exclusive) s[:] cpia total de s s[a:b:n] cpia de n em n itens
Atribuio em fatias: s[2:5] = [4,3,2,1] vlida apenas em sequncias mutveis
Funes nativas p/ sequncias
-
8/14/2019 Python Para Zope
48/67
Funes nativas p/ sequncias len(s)
nmero de elementos min(s), max(s)
valores mnimo e mximo contido em s sorted(s)
retorna um iterador para percorrer oselementos em ordem ascendente
reversed(s) retorna um iterador para percorrer os
elementos do ltimo ao primeiro
Dicionrios
-
8/14/2019 Python Para Zope
49/67
Dicionrios Dicionrios so colees de valores
identificados por chaves nicas Outra definio: dicionrios so colees de
pares chave:valor que podem serrecuperados pela chave
Dicionrios constantes so representadosassim:uf={ 'PA':'P', 'AM':'Amazonas',
'PR':'Paran','PE':'Pernambuco'}
Dicionrios: caractersticas
-
8/14/2019 Python Para Zope
50/67
Dicionrios: caractersticas As chaves so sempre nicas As chaves tm que ser objeto imutveis
nmeros, strings e tuplas so alguns tipos deobjetos imutveis
Qualquer objeto pode ser um valor A ordem de armazenagem das chaves
indefinida Dicionrios so otimizados para acesso
direto a um item pela chave, e no paraacesso sequencial em determinada ordem
-
8/14/2019 Python Para Zope
51/67
Alguns mtodos de dicionrios
-
8/14/2019 Python Para Zope
52/67
Alguns mtodos de dicionrios Verificar a existncia de uma chave
d.has_key(c) c in d
Obter listas de chaves, valores e pares d.keys() d.values() d.items()
Acessar um item que talvez no exista d.get(chave) #retorna None ou default
Conjuntos
-
8/14/2019 Python Para Zope
53/67
j Conjuntos so colees de itens nicos e
imutveis Existem duas classes de conjuntos:
set : conjuntos mutveis suportam s.add(item) e s.remove(item)
frozenset : conjuntos imutveis podem ser elementos de outros conjuntos e
chaves de dicionrios
Removendo repeties
-
8/14/2019 Python Para Zope
54/67
p Transformar uma lista num set e depois
transformar o set em lista remove todosos itens duplicados da lista
l = [2, 6, 6, 4, 4, 6, 1, 4, 2, 2]s = set(l)l = list(s)print l# [1, 2, 4, 6]
Arquivos
-
8/14/2019 Python Para Zope
55/67
q Objetos da classe file representam
arquivos em disco Para abrir um arquivo, use o construtor
file() (a funo open() um sinnimo) abrir arquivo binrio para leitura
arq = file('/home/juca/grafico.png','rb') abrir arquivo texto para escrita
arq = file('/home/juca/nomes.txt','w') abrir arquivo para acrescentar (append) arq = file('/home/juca/grafico.png','a')
Execuo condicional
-
8/14/2019 Python Para Zope
56/67
Forma simples
if cond: comando Forma em bloco
if cond:comando1comando2
Alternativas
if cond1: comando1elif cond2: comando 2else : comando 3
Repeties: comando for
-
8/14/2019 Python Para Zope
57/67
p Para percorrer sequncias previamente
conhecidas for item in lista:
print item
Sendo necessrio um ndice numrico: for idx, item in enumerate(lista):
print idx, item
Para percorrer uma PA de 0 a 99: for i in range(100):print i
Repeties: comando while
-
8/14/2019 Python Para Zope
58/67
p Para repetir enquanto uma condio verdadeira
""" Srie de Fibonacciat 1.000.000
"""a = b = 1while a < 10**6:
print aa, b = b, a + b
Controle fino de repeties
-
8/14/2019 Python Para Zope
59/67
Para iniciar imediatamente a prxima volta do loop, use o comando continue
""" Ignorar linhas em branco"""
soma = 0for linha in file('vendas.txt'):if not linha.strip():
continuecodigo, qtd, valor = linha.split()soma += qtd * valor
print soma
Controle fino de repeties (2)
-
8/14/2019 Python Para Zope
60/67
Para encerrar imediatamente o loop, useo comando break total=0while True:
p = raw_input('+')if not p.strip(): breaktotal += float(p)
print '---------'print total
Tratamento de excees
-
8/14/2019 Python Para Zope
61/67
Comando try/except
total=0while True:
p = raw_input('+')
if not p.strip(): break try :total += float(p)
except ValueError:break
print '---------'print total
Definio de funes
-
8/14/2019 Python Para Zope
62/67
Comando def inicia a definio Comando return marca o fim da
execuo da funo e define o resultadoa ser retornado
def inverter(texto):if len(texto)
-
8/14/2019 Python Para Zope
63/67
Valores default indicam args. opcionais argumentos obrigatrios devem vir antes de
argumentos opcionaisdef exibir(texto, estilo=None, cor='preto'):
Palavras-chave podem ser usadas parafornecer argumentos fora de ordem Como a funo acima pode ser invocada:
exibir('abacaxi')exibir('abacaxi','negrito','amarelo')exibir('abacaxi',cor='azul')
Argumentos arbitrrios
-
8/14/2019 Python Para Zope
64/67
Use *args para aceitar uma lista deargumentos posicionais
Use **args para aceitar um dicionrio deargumentos identificados por palavras-
chave Exemplo:
def tag(nome, *linhas, **atributos):
Argumentos arbitrrios (2)
-
8/14/2019 Python Para Zope
65/67
print tag('br')print tag('img',src='foto.jpg',width=3,height=4)
print tag('a','Wikipdia',href='http://wikipedia.org')print tag('p','Eu no devia te dizer',
'mas essa lua','mas esse conhaque','botam a gente comovido como o diabo.',id='poesia')
WikipdiaEu no devia te dizermas essa luamas esse conhaquebotam a gente comovido como o diabo.
-
8/14/2019 Python Para Zope
66/67
Python no ambiente Zope
-
8/14/2019 Python Para Zope
67/67
Quase todo o cdigo fonte do Zope escrito em Python
apenas uma pequena parte escrita em C Seu prprio cdigo Python pode rodar no
Zope de vrias formas: como um objeto Script (Python)
sujeito a muitas limitaes por segurana
como um objeto External Method como um pacote (Zope Product)