Apostila Full Python
Apostila Full Python
Introdução.............................................................................................................................................3
Histórico...........................................................................................................................................3
Características da linguagem........................................................................................................... 3
Modo interativo................................................................................................................................3
Bytecode.......................................................................................................................................... 4
Ferramentas......................................................................................................................................4
Frameworks..................................................................................................................................... 5
Sintaxe.................................................................................................................................................. 6
Controle de Fluxo................................................................................................................................. 8
Laços.....................................................................................................................................................9
Iteração...........................................................................................................................................10
Variáveis.............................................................................................................................................12
Números.........................................................................................................................................12
Verdadeiro e falso..........................................................................................................................12
Strings............................................................................................................................................ 13
Listas...................................................................................................................................................18
Tuplas.............................................................................................................................................20
Dicionários (Hashes).......................................................................................................................... 21
Funções...............................................................................................................................................23
PyDOC............................................................................................................................................... 25
Exercícios I......................................................................................................................................... 26
Módulos.............................................................................................................................................. 27
Namespaces................................................................................................................................... 28
Módulos da biblioteca padrão........................................................................................................28
Pacotes................................................................................................................................................ 30
Arquivos e I/O.................................................................................................................................... 31
Introspecção........................................................................................................................................32
Módulo inspect.............................................................................................................................. 32
Exceções............................................................................................................................................. 34
Decoradores........................................................................................................................................ 35
Exercícios II........................................................................................................................................37
Classes................................................................................................................................................ 38
Métodos e atributos........................................................................................................................38
Herança simples.............................................................................................................................40
Herança múltipla............................................................................................................................40
Properties....................................................................................................................................... 42
Sobrecarga de operadores.............................................................................................................. 43
Classes abertas............................................................................................................................... 43
Exercícios III...................................................................................................................................... 45
Persistência......................................................................................................................................... 46
Serialização....................................................................................................................................46
Banco de dados...................................................................................................................................47
DBI.................................................................................................................................................47
ZODB................................................................................................................................................. 49
Web.....................................................................................................................................................51
MVC................................................................................................................................................... 53
Exercícios IV...................................................................................................................................... 56
Geradores............................................................................................................................................57
Programação funcional....................................................................................................................... 58
Mapeamento...................................................................................................................................58
Filtragem........................................................................................................................................58
Redução......................................................................................................................................... 59
Transposição.................................................................................................................................. 60
List comprehension........................................................................................................................62
Generator expression..................................................................................................................... 62
XML................................................................................................................................................... 63
Exercícios V....................................................................................................................................... 66
Introdução 3
Introdução
Python é uma linguagem de altíssimo nível (Very High Level Language, como Perl, PHP e Ruby),
orientada a objetos, de tipagem dinâmica e forte, interpretada, interativa, Open Source (com licença
compatível com GPL) e sua especificação é mantida pela PSF (Python Software Foundation)
Histórico
Python foi criada em 1990, a partir da linguagem ABC, e tinha como foco original usuários como
físicos e engenheiros. Segundo seu criador, Guido van Rossum, a linguagem foi concebida para
ocupar o espaço que existia entre as linguagens C/C++ e o shell do UNIX.
Hoje, a linguagem é bem aceita na industria por empresas de alta tecnologia, tais como:
Características da linguagem
Modo interativo
O modo interativo é uma característica diferencial da linguagem, pois é possível testar e modificar o
código de um programa antes da inclusão do código nos programas, por exemplo.
Introdução 4
Python 2.4.3 (#69, Mar 29 2006, 17:35:34) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> ary = [4, 5, 3, 6, 2, 7, 1, 9, 0]
>>> print ary
[4, 5, 3, 6, 2, 7, 1, 9, 0]
>>>
Bytecode
O código fonte é traduzido pelo interpretador para o formato bytecode, que é multiplataforma e
pode ser executado e distribuído sem fonte original.
Por padrão, o interpretador compila os fontes e armazena o bytecode em disco, para que a próxima
vez que o executar, não precise compilar novamente o programa, reduzindo o tempo de carga na
execução. Se os fontes forem alterados, o interpretador se encarregará de regerar o bytecode
automaticamente, mesmo utilizando o shell interativo. Porém quando um programa ou um módulo é
evocado, o interpretador faz a análise do código, compila se necessário e executá-lo na máquina
virtual Python.
Ferramentas
Existem muitas ferramentas de desenvolvimento para Python, como IDEs, editores e shells (que
aproveitam da capacidade interativa do Python)
IDEs:
Editores:
• SciTE
Shells:
• PyCrust (gráfico)
• Ipython (texto)
Introdução 5
Frameworks
Sintaxe
Um programa feito em Python é constituído de linhas lógicas, que são terminadas por um caractere
de nova linha ('\n'), ou continuadas na próxima linha, pelo caractere de contra-barra ('\') ou por
parênteses, colchetes ou chaves, em expressões que utilizam tais caracteres.
Exemplos:
Observações:
• Após o caractere '#' até o final da linha, tudo é considerado um comentário e ignorado,
exceto por funções que trabalham diretamente com os comentários.
• Para alterar a codificação de um arquivo fonte é necessário acrescentar o comentário '#-#-
coding: <encoding-name> -#-' no inicio do arquivo.
Endentação:
Exemplos:
a=1
b=2
if a < b:
print 'a menor'
else:
Sintaxe 7
Controle de Fluxo
Sintaxe:
if <condição>:
<código>
elif <condição>:
<código>
elif <condição>:
<código>
else:
<código>
Aonde:
Exemplo:
if temp < 0:
print 'Congelando...'
elif 0 <= temp <= 20:
print 'Frio'
elif 21 <= temp <= 25:
print 'Normal'
elif 26 <= temp <= 35:
print 'Quente'
else:
print 'Muito quente!'
Laços 9
Laços
Sintaxe:
while <condição>:
<código>
continue
break
else:
<código>
A clausula break interrompe o laço e continue passa para a próxima iteração. O código dentro do
else é executado ao final do laço, a não ser que o laço tenha sido interrompido por break.
Exemplo:
# Soma de 0 a 99
s=0
for x in range(1, 100):
s=s+x
print s
# De outra forma
s=0
x=1
while x < 100:
s=s+x
x=x+1
print s
A função range(m, n) retorna uma lista de inteiros, começando em “m” e menores que “n”.
O “for” aceita não só sequências estáticas, mas também sequências geradas por iteradores.
Laços 10
Iteração
1
2 x Agora, x aponta para 2.
3
4
5
6
...
A referência foi atualizada.
Laços 11
Variáveis 12
Variáveis
Python usa tipagem dinâmica, o que significa que o tipo de uma variável é inferido pelo
interpretador em tempo de execução.
As variáveis são criadas através da atribuição e destruídas pelo coletor de lixo, quando não existem
mais referências a elas.
Os nomes das variáveis devem começar com letra (sem acentuação) ou sublinhado (_) e seguido por
letras (sem acentuação), dígitos ou sublinhados (_), sendo que maiúsculas e minúsculas são
consideradas diferentes.
Números
Exemplos:
Verdadeiro e falso
• São considerados falsos: False, None (nulo), 0 (zero), '' (string vazia), [] (lista vazia), ()
(tupla vazia), {} (dicionário vazio) e outras estruturas com tamanho (len()) igual a zero
• São considerados verdadeiros todos os outros objetos
• Os operadores lógicos são: and, or, not, is e in
Operadores:
Strings
As strings no Python são imutáveis, sendo assim, não é possível adicionar texto ou mesmo
modificar algum caractere.
Representação:
Criação:
str1 = 'abcdefghij'
str2 = "outro texto"
str3 = '''este texto
tem mais de uma
linha'''
# No começo:
[Link]( 'abc') # Verdadeiro
[Link]('cba') # Falso
# No fim:
[Link]('ij') # Verdadeiro
[Link]('xy') # Falso
# Em qualquer posição:
[Link]('cde') # retorna 2
[Link]('XXX') # retorna -1, pois não existe
'a12'.isalpha() # Falso
#Para maiúscula:
print 'abC'.upper() # Imprime: ABC
#Para minúscula:
print 'aBC'.lower() # Imprime: abc
'AbC'.islower() # Falso
'ABC'.isupper() # Verdadeiro
#Da esquerda:
print 'abc'.lstrip() # Imprime: abc
print '_*_ abc _*_' .lstrip('*_') # Imprime: abc
#Da direita:
print 'abc'.rstrip() # Imprime: abc
print '_*_ abc _*_'.rstrip('*_') # Imprime : abc
#Troca de pedaços:
print 'este eh um teste'.replace('ste', 'ABC')
# Imprime: eABC eh um teABC
import string
Interpolação:
Variáveis 17
Listas
Criação:
lista[0] = 123
Acrescentando ao fim:
[Link]()
[Link](lambda x, y: cmp(y, x)) # reverso
[Link]()
[Link](3) # retorna 1
Apagando um elemento:
l =[1, 2, 3, 4, 5, 6]
l[2:4] = [10, 20]
print l # imprime '[1, 2, 10, 20, 5, 6]'
Tamanho da lista:
Tuplas
Parecido com as listas, porém é imutável: não se pode acrescentar, apagar ou modificar valores.
Exemplos:
Dicionários (Hashes)
Estrutura:
Elementos Objetos
imutáveis quaisquer
Chaves Valores
Fractal IFS
Palheta Verde
Limites (640, 480)
(0, 0) (42, 35)
Criação:
Acesso a elementos:
print dic['nome']
Adicionando elementos:
Dicionários (Hashes) 22
lista = [1, 2]
dic[lista] = '***'
del dic['album']
itens = [Link]()
chaves = [Link]()
valores = [Link]()
Obtendo os iteradores:
Funções
Exemplos:
def fatorial(num):
if num <= 1:
return 1
else:
return(num * fatorial(num - 1))
def fib(n):
"""Fibonacci
fib(n) => fib(n - 1) + fib(n - 2) se n > 1
fib(n) => 1 se n <= 1
"""
if n > 1:
return fib(n - 1) + fib(n - 2)
else:
return 1
# Mostrar Fibonacci de 1 a 5
for i in [1, 2, 3, 4, 5]:
print i, '=>', fib(i)
Funções 24
def html_rgb(color='#000000'):
"""Converte #RRGGBB em R, G, B"""
if [Link]('#'): color = color[1:]
r = int(color[:2], 16)
g = int(color[2:4], 16)
b = int(color[4:], 16)
return r, g, b # Uma sequência
Observações:
• Os argumentos com valor devem vir por último, depois dos argumentos sem padrão.
• O valor do padrão para um parâmetro é calculado quando a função é definida.
• Os argumentos passados sem identificador são recebidos pela função na forma de uma lista.
• Os argumentos passados com identificador são recebidos pela função na forma de um
dicionário.
PyDOC
pydoc ./[Link]
pydoc -p 8000
pydoc -g
Exercícios I
Lembrando que:
9
F = ⋅C 32
5
2. Implementar uma função que retorne verdadeiro se o número for primo (falso caso contrário).
Testar de 1 a 100.
3. Implementar uma função que receba uma lista de listas de comprimentos quaisquer e retorne uma
lista de uma dimensão.
4. Implementar uma função que receba um dicionário e retorne a soma, a média e a variação dos
valores.
Módulos 27
Módulos
Módulos podem conter qualquer estrutura do Python e são executados quando importados. Eles
geralmente são compilados uma vez e armazenados em arquivo (pyc ou pyo), possuem namespace
próprio e aceitam Doc Strings. São objetos Singleton (só é carregada uma instância, que é acessada
de forma global).
Os módulos são localizados pelo interpretador através da lista de pastas PYTHONPATH ([Link]),
que normalmente inclui a pasta corrente em primeiro lugar. O módulo principal de um programa
tem a variável __name__ igual à “__main__”.
Os módulos carregados através da instrução import. Desta forma, ao usar alguma estrutura do
módulo, é necessário identificar o módulo. Isto é chamado importação absoluta.
import os
print [Link]
Namespaces
Namespaces são dicionários que relacionam os nomes dos objetos (referências) e os objetos em si.
Normalmente, os nomes estão definidos em dois dicionários, acessíveis pelas funções locals() e
globals(). Os dicionários mudam dinamicamente em tempo de execução.
Var 3
Estas são variáveis locais.
Var 4
Exemplo de módulo:
"""
modutils => utilitários para módulos
"""
import [Link]
import sys
import glob
def find(txt):
"""encontra módulos que tem o nome contendo texto"""
resp = []
for path in [Link]:
mods = [Link]('%s/*.py' % path)
for mod in mods:
if txt in [Link](mod):
[Link](mod)
return resp
import modutils
mods = [Link]('xml')
Saída:
Pacotes
Pacotes são pastas que são identificadas pelo interpretador pela presença de um arquivo com o
nome “__init__.py”. Os pacotes servem como containers para os módulos.
[Link] [Link]
crt [Link]
lcd [Link]
oled [Link]
Arquivos e I/O 31
Arquivos e I/O
Os arquivos no Python são representados por objetos do tipo file. Os objetos file oferecem métodos
para leitura e escrita, em modo texto ou binário.
Exemplo de escrita:
import sys
temp = file('[Link]')
for x in temp:
[Link](x)
[Link]()
Exemplo de leitura:
import sys
import [Link]
if not [Link](fn):
print 'Tente outra vez...'
[Link]()
# Numerando as linhas
for i, s in enumerate(file(fn)):
print i + 1, s,
A função enumerate é um iterador que retorna dois elementos a cada iteração: um número
sequencial e um item da sequência.
Introspecção 32
Introspecção
type(objeto)
# Retorna o tipo (classe) do objeto.
id(objeto)
# Retorna o identificador do objeto.
locals()
# Retorna o dicionário de variáveis locais.
globals()
# Retorna o dicionário de variáveis globais.
len(objeto)
# Retorna o tamanho do objeto.
dir(objeto)
# Retorna a lista de estruturas do objeto.
help(objeto)
# Retorna as Doc Strings do objeto.
isinstance(objeto, classe)
# Retorna verdadeiro se objeto deriva da classe.
issubclass(subclasse, classe)
# Retorna verdadeiro se subclasse herda classe.
Módulo inspect
O módulo inspect provê um conjunto de funções de introspecção prontas que permitem investigar
métodos, módulos e outras estruturas.
Exemplo:
Introspecção 33
print [Link]([Link])
# <module 'ntpath' from 'C:\Python24\lib\[Link]'>
print [Link](str)
# True
Exceções
print 1/0
try:
print 1/0
except ZeroDivisionError:
print 'Erro ao tentar dividir por zero.'
import traceback
try:
fn = raw_input('Nome do arquivo: ').strip()
# Numerando as linhas
for i, s in enumerate(file(fn)):
print i + 1, s,
except:
trace = traceback.format_exc()
print 'Aconteceu um erro:\n', trace
file('[Link]', 'a').write(trace)
raise SystemExit
Decoradores 35
Decoradores
Decorador
Função
Função
transformada
Exemplo:
def dumpargs(f):
def func(*args):
print args
return f(*args)
return func
@dumpargs
def multiply(*nums):
m=1
for n in nums:
m=m*n
return m
print multiply(1, 2, 3)
Saída:
Decoradores 36
(1, 2, 3)
6
Exercícios II 37
Exercícios II
1. Implementar um programa que receba um nome de arquivo e gere estatísticas sobre o arquivo
(número de caracteres, número de linhas e número de palavras)
3. Implementar uma função que leia um arquivo e retorne uma lista de tuplas com os dados (o
separador de campo do arquivo é vírgula), eliminando as linhas vazias. Caso ocorra algum
problema, imprima uma mensagem de aviso e encerre o programa.
a. split(fn, n), que quebra o arquivo fn em partes de n bytes e salva com nomes sequênciais (se fn =
[Link], então arq_001.txt, arq_002.txt, ... )
b. join(fn, fnlist) que junte os arquivos da lista fnlist em um arquivo só fn.
Classes 38
Classes
Uma classe é uma abstração de uma entidade modelada de forma computacional. Esta abstração
geralmente é composta por estruturas de dados (atributos) que descrevem o que é a entidade e
funções (métodos) que descrevem como a entidade se comporta.
Novos objetos são criados a partir das classes através de atribuição comum.
Objeto
Atributos de
Classe classe
Atributos de
Métodos de
classe
Objeto = Classe() classe
Métodos de
classe Métodos
estáticos
Métodos
estáticos Métodos
dinâmicos
Métodos e atributos
Métodos e atributos novos podem ser da classe, portanto compartilhados por todas as instâncias
(objetos) daquela classe ou exclusivos da instância.
Métodos especiais são identificados por nomes no padrão “__metodo__” (dois sublinhados no
início e no final do nome) e definem como os objetos derivados da classe irão se comportar em
situações particulares, como na sobrecarga de operadores.
As classes new style são derivadas da classe object e podem utilizar recursos novos das classes do
Classes 39
Sintaxe:
def __done__(self):
"""Destrutor da classe"""
<codigo>
@classmethod
"""Método de classe"""
def cls_metodo(cls, params):
<codigo>
@staticmethod
"""Método estático"""
def est_metodo(params):
<codigo>
obj = Classe()
[Link]()
Classe.cls_metodo()
Classe.est_metodo()
Métodos estáticos são aqueles que não tem ligação com atributos do objeto ou da classe. Funcionam
como as funções comuns.
Métodos de classe podem usar atributos e outros métodos de classe, porém não dos objetos.
Herança simples
Herança múltipla
Classe Antiga
Atributos Métodos
class Nova(Antiga):
Classe Nova
Atributos Métodos
antigos antigos
Atributos Métodos
redefinidos redefinidos
Atributos Métodos
novos novos
Classes 41
3 Terrestre Aquático 4
1 Carro Barco 2
Exemplo:
class Cell(object):
"""Classe para células de planilha"""
def __init__(self, formula='""', format='%s'):
[Link] = formula
[Link] = format
def __repr__(self):
return [Link] % eval([Link])
print Cell('123**2')
print Cell('23*2+2')
print Cell('abs(-1.45 / 0.3)', '%2.3f')
Exemplo de herança:
class Pendrive(object):
def __init__(self, size, usb='2.0'):
[Link] = size
Classes 42
[Link] = usb
class MP3Player(Pendrive):
def __init__(self, size, usb='2.0', turner=False):
[Link] = turner
Pendrive.__init__(self, size, usb)
mp3 = MP3Player(1024)
Properties
# get_*, set_*...
class Projetil(object):
def __init__(self, alcance, tempo):
[Link] = alcance
[Link] = tempo
def get_velocidade(self):
return [Link] / [Link]
# Property de leitura
class Projetil(object):
def __init__(self, alcance, tempo):
[Link] = alcance
[Link] = tempo
@property
def velocidade(self):
return [Link] / [Link]
print [Link]
class Projetil(object):
def __init__(self, alcance, tempo):
[Link] = alcance
[Link] = tempo
def getv(self):
return [Link] / [Link]
def setv(self, v):
[Link] = [Link] / v
velocidade = property(getv, setv)
Sobrecarga de operadores
class String(str):
Classes abertas
Classes 44
class User(object):
def __init__(self, name):
[Link] = name
User.set_password = set_password
user = User('guest')
user.set_password('guest')
print dir(user)
print [Link]
Exercícios III 45
Exercícios III
1. Crie uma classe que modele um quadrado, com um atributo lado e os métodos: mudar valor do
lado, retornar valor do lado e calcular área.
2. Crie uma classe derivada de lista com um método retorne os elementos da lista sem repetição.
• Com coordenadas x, y e z;
• Que suporte soma, subtração, produto escalar, produto vetorial;
• Que calcule o módulo (valor absoluto) do vetor.
Persistência 46
Persistência
Persistência pode ser definida como a manutenção automática do estado de um objeto entre
execuções de um programa. A persistência libera o desenvolvedor de escrever código
explicitamente para armazenar objetos em arquivos e ajuda a manter o foco no modelo de dados da
aplicação.
Serialização
Exemplo:
import pickle
try:
setup = [Link](file('[Link]'))
print setup
except:
setup = {'timeout': 10,
'server': '[Link]',
'port': 80
}
[Link](setup, file('[Link]', 'w'))
O setup default.
Banco de dados
DBI
DBI (Database Interface) é uma especificação que descreve como deve ser o comportamento de um
módulo de acesso de banco de dados.
SGBD
Exemplo:
import MySQLdb
cur = [Link]()
[Link]('show databases')
recordset = [Link]()
Banco de dados 48
[Link]()
ZODB 49
ZODB
Aplicação
persistente
ZODB
ZEO Storage
Exemplo:
# Conectando
ZODB 50
conn = [Link]()
# Um registro persistente
root['singer'] = 'Kate Bush'
# Efetuando a alteração
[Link]()
print root['singer'] # Kate Bush
# Mudando um atributo
root['singer'] = 'Tori Amos'
print root['singer'] # Tori Amos
# Abortando...
[Link]()
print root['singer'] # Kate Bush
Web 51
Web
Servidor
Requisição GET
ou POST HTTP
Browser Resposta
Exemplo (CherryPy):
import cherrypy
class Root(object):
@[Link]
def index(self):
return 'Hello World!'
[Link](Root())
template = '<html>\n<body>\n'\
'<py-for="prog in progs">'\
' <py-eval="prog"><br>\n'\
'</py-for>'\
'</body>\n</html>\n'
print renderTemplate(template)
Saída:
<html>
<body>
Yes<br>
Genesis<br>
King Crimson<br>
</body>
</html>
MVC 53
MVC
Obtêm os dados e
Controller Recebe e traduz as
apresenta ao
entradas do usuário.
usuário.
View Model
Encapsula os dados
da aplicação e a
lógica de domínio.
Exemplo:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Exemplo MVC"""
# CherryPy
import cherrypy
# CherryTemplate
from cherrytemplate import renderTemplate
# ZODB
from ZODB import FileStorage, DB
from persistent import Persistent
import transaction
# Classe persistente
MVC 54
class Animal(Persistent):
"""Classe de animais"""
pass
class Root(object):
"""Raíz do site"""
@[Link]
def index(self):
"""Lista de animais do Zoo"""
return renderTemplate(file='[Link]')
@[Link]
def add(self):
"""Cadastra novos animais"""
return renderTemplate(file='[Link]')
@[Link]
def save(self, animal):
"""Salva o animal"""
if animal:
new = Animal()
[Link] = animal
[Link] = animal
zoo[[Link]] = new
[Link]()
return renderTemplate(file='[Link]')
# Inicia o servidor
[Link](Root())
Arquivo [Link]:
MVC 55
<html>
<body>
<py-if="zoo">
<py-for="animal in sorted([Link]())">
<py-eval="animal"><br />
</py-for>
</py-if>
<form action="/add" method="post">
<input type="submit" value=" adicionar " />
</body>
</html>
Arquivo [Link]:
<html>
<body>
<form action="/save" method="post">
<input type="text" size="30" name="animal" />
<input type="submit" value=" salvar " />
</body>
</html>
Exercícios IV 56
Exercícios IV
1. Implementar uma classe Animal com os atributos: nome, especie, gênero, peso, altura e idade. O
objeto derivado desta classe deverá salvar seu estado em arquivo com um método chamado “salvar”
e recarregar o estado em um método chamado “desfazer”.
2. Implementar uma função que formate uma lista de tuplas como tabela HTML
Solução:
3. Implementar uma aplicação Web com uma saudação dependente do horário (exemplos: “Bom
dia, são 09:00.”, “Boa tarde, são 13:00.” e “Boa noite, são 23:00.”)
4. Implementar uma aplicação Web com um formulário que receba expressões Python e retorne a
expressão com seu resultado.
Geradores 57
Geradores
Geradores são funções que, ao invés de retornar sequências, retornam um valor de cada vez
Geralmente são evocados através de um iterador (for ... in ...)
Lazy evaluation: só processam quando for necessário, sendo assim, economizam recursos
Permitem trabalhar com sequências ilimitadas de itens.
Exemplo:
import os
def find(path='.'):
for item in [Link](path):
fn = [Link]([Link](path, item))
if [Link](fn):
for f in find(fn):
yield f
else:
yield fn
for fn in find('c:/temp'):
print fn
Programação funcional
Mapeamento
O mapeamento consiste em aplicar uma função a todos os itens de uma sequência, gerando outra
lista contendo os resultados e com o mesmo tamanho da lista inicial.
Filtragem
Programação funcional 59
Redução
Programação funcional 60
Transposição
Programação funcional 61
Exemplos:
# log na base 10
from math import log10
# Dividindo por 3
print map(lambda x: x / 3, nums)
# Só os ímpares
print filter(lambda x: x % 2, nums)
# Soma
print reduce(lambda x, y: x + y, nums)
# Multiplicação
print reduce(lambda x, y: x * y, nums)
List comprehension
Generator expression
XML 63
XML
XML é um padrão representação de dados aonde o metadado é transportado junto com os dados
através de tags.
Árvore de elementos
Canino Raiz
Chacal Cachorro
Nome: Bandit
Raça: Labrador Atributos
Cor: castanho claro
XML 64
Elemento <Lobo>...</Lobo>
Lobo
Cachorro Tag
Nome: Bandit
Raça: Labrador Atributos
Cor: castanho claro
Exemplo:
root = Element('Canino')
lobo = Element('Lobo')
raposa = Element('Raposa')
chacal = Element('Chacal')
cachorro = Element('Cachorro', nome='Bandit',
raca='Labrador', cor='Castanho Claro')
[Link](lobo)
[Link](raposa)
[Link](chacal)
[Link](cachorro)
ElementTree(root).write('[Link]')
XML 65
<Canino>
<Lobo>
<Chacal />
<Cachorro cor="Castanho Claro" nome="Bandit" raca="Labrador" />
</Lobo>
<Raposa />
</Canino>
tree = ElementTree(file='[Link]')
root = [Link]()
Exercícios V
2. Implementar o gerador de números primos como uma expressão (dica: use o módulo itertools)
3. Implementar um gerador que produza tuplas com as cores do padrão RGB (R, G e B variam de 0
a 255) usando xrange() e uma função que produza uma lista com as tuplas RGB usando range().
Compare a performance.
4. Implementar um gerador que leia um arquivo e retorne uma lista de tuplas com os dados (o
separador de campo do arquivo é vírgula), eliminando as linhas vazias. Caso ocorra algum
problema, imprima uma mensagem de aviso e encerre o programa.