python para zope

Upload: sergio-luiz-araujo-silva

Post on 30-May-2018

255 views

Category:

Documents


0 download

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


    Wikipdia

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