Você está na página 1de 20

Primeiros Elogios ao Use a Cabea!

Python

O Use a Cabea! Python uma tima introduo sobre como a linguagem Python
usada no mundo real. O livro vai alm da sintaxe, para ensin-lo a criar aplicativos para
telefones Android, Google App Engine e muito mais.
David Griffiths, autor e instrutor da Agile

Onde outros livros comeam com a teoria e passam para os exemplos, o Use a Cabea!
Python salta diretamente para o cdigo e explica a teoria medida em que voc l.
Este um ambiente muito mais eficaz de aprendizagem porque envolve o leitor desde
o incio. Foi uma alegria l-lo. Foi divertido, sem ser petulante e informativo sem ser
condescendente. A amplitude de exemplos e explicaes abrange a maior parte do
que voc faz em seu trabalho dirio. Eu recomendo este livro a qualquer um que esteja
comeando no Python.
Jeremy Jones, coautor do Python for Unix and Linux System Administration

O Use a Cabea Python um livro timo para comear a se aprimorar em uma linguagem
que cada vez mais relevante.
Phil Hartley, Universidade de Avano Tecnolgico
Elogios sobre outros livros da srie

O Use a Cabea! Java, de Kathy e Bert transforma a pgina impressa na coisa mais prxima
interface grfica do usurio que voc j viu. Em tom irnico, de maneira descolada, os autores
tornam o aprendizado do Java uma experincia envolvente do tipo o que voc far em seguida?
Warren Keuffel, Software Development Magazine

Alm do estilo envolvente que o leva de leigo para o status de guerreiro Java, o Use a Cabea! Java
abrange uma enorme quantidade de questes prticas que os outros livros abandonam, como o
temido exerccio para o leitor.... inteligente, irnico, descolado e prtico no h muitos livros
que podem fazer essa reivindicao e viver de acordo com ela, enquanto tambm ensinam sobre a
serializao do objeto e os protocolos de inicializao da rede.
Dr. Dan Russell, Diretor de Cincias e Pesquisa da Experincia do Usurio
Centro de Pesquisa Almaden da IBM (e ensina Inteligncia Artificial na
Universidade de Stanford)

rpido, irreverente, divertido e cativante. Tenha cuidado voc pode realmente


aprender algo!
Ken Arnold, ex-engenheiro snior da Sun Microsystems e coautor
(com James Gosling, criador do Java), Linguagem de Programao Java

Eu sinto como se o peso de milhares de livros acabasse de ser retirado da minha cabea.
Ward Cunningham, inventor do Wiki e fundador do grupo Hillside

O tom certo para o guru entendido, casual e legal em todos ns. A referncia certa para
as estratgias de desenvolvimento prtico faz meu crebro avanar sem ter que passar
pela fala velha e cansada do professor.
Travis Kalanick, fundador da Scour and Red Swoosh
Membro do MIT TR100

H livros que voc compra, livros que voc guarda, livros que voc mantm em sua mesa
e, graas OReilly e equipe do Use a Cabea!, existem livros Use a Cabea!. Eles so os
nicos que esto com as orelhas dobradas, deformados e so levados a todos os lugares. O
Use a Cabea! SQL est no topo da minha pilha. Ah, at o PDF que tenho para reviso est
surrado e rasgado.
Bill Sawyer, Gerente de Currculos ATG, Oracle

A admirvel clareza, humor e doses substanciais de inteligncia fazem deste o tipo de livro
que ajuda at os no programadores a pensar bem sobre a resoluo do problema.
Cory Doctorow, coeditor do Boing Boing autor,
Down and Out in the Magic Kingdom e
Someone Comes to Town, Someone Leaves Town
Elogios sobre outros livros da srie

Eu recebi o livro ontem e comecei a l-lo... e no consegui parar. Isto definitivamente


trs legal. divertido e eles abordam muita coisa. Esto certos ao meu ver. Estou
realmente impressionado.
Erich Gamma, Engenheiro da IBM e coautor de Design Patterns

Um dos livros mais divertidos e inteligentes sobre design de software que eu j li.
Aaron LaBerge, Tecnologia VP, ESPN.com

O que costumava ser um processo longo de aprendizagem com tentativas e erros, agora
foi reduzido a um livro envolvente.
Mike Davidson, CEO, Newsvine, Inc.

O design elegante o destaque de cada captulo, cada conceito transmitido em doses


iguais de pragmatismo e inteligncia.
Ken Goldstein, Vice-Presidente executivo da Disney Online

Eu ! o Use a Cabea HTML com CSS & XHTML ensina tudo que voc precisa aprender
em um formato divertido.
Sally Applin, Designer IU e Artista

Geralmente, quando leio um livro ou um artigo sobre padres de projetos, tenho que
ficar de olho em alguma coisa s para me certificar que estava prestando ateno. No o
caso. Por mais estranho que possa parecer, este livro torna divertido o aprendizado sobre
padres de projetos.
Enquanto outros livros sobre padres de projetos esto dizendo Bueller... Bueller...
Bueller..., este est sobre o carro alegrico, cantandoShake it up, baby!
Eric Wuehler

Eu literalmente amo este livro. Na verdade, eu beijei este livro na frente da minha esposa.
Satish Kumar
Outros livros da srie Use a Cabea!

!"#$%$&%'#(%)$*+%,$-./0""1/2%3

!"#$%$&%'#(%)$435#'.%

!"#$%$&%'#(%)$*2631"#$7$-./+#8/$9.1#28%:/$%/$9'+#8/

!"#$%$&%'#(%)$*2631"#$:#$;%:/"

!"#$%$&%'#(%)$&<$=$>?$@:1(A/

!"#$%$&%'#(%)$;#"#2B/3B1C#28/$:#$D/E8F%.#

!"#$%$&%'#(%)$;#"#2B/3B#2:/$G%.%$1-H/2#

!"#$%$&%'#(%)$@"8%8I"81J%

!"#$%$&%'#(%)$@,J#3

!"#$%$&%'#(%)$KI"1J%

!"#$%$&%'#(%)$L#/C#8.1%$>;

!"#$%$&%'#(%)$M%B%$>?$@:1(A/

!"#$%$&%'#(%)$M%B%DJ.1G8

!"#$%$&%'#(%)$-%:.N#"$:#$-./+#8/"$=$>?$@:1(A/

!"#$%$&%'#(%)$-./5.%C%(A/

!"#$%$&%'#(%)$-O-$7$PQDRS

!"#$%$&%'#(%)$-P-

!"#$%$&%'#(%)$T%13"$=$>?$@:1(A/

!"#$%$&%'#(%)$T#:#"$:#$&/CGU8%:/.#"

!"#$%$&%'#(%)$D#.B3#8"$7$MD-$=$>?$@:1(A/

!"#$%$&%'#(%)$DRS

!"#$%$&%'#(%)$V#'$;#"152
Use a Cabea! Python

No seria um sonho se existisse um


!"#$%&'()*%+&,-.&+/%&01.22.&#%34&,-.$.$&
.2)5$&.6&,-5!,-.$&!-75$8&6.+%2&035$&
9$.2%&+5&:$.+).&;%&2.-&3%69-)5;%$&
.23$.#.+;%&3<;"7%=&>-&53*%&,-.&"22%&?&
apenas uma fantasia...

Paul Barry

Rio de Janeiro, 2012


Dedico este livro a todas aquelas pessoas generosas na
comunidade Python, que ajudaram a tornar esta grande
pequena linguagem a tecnologia de programao excelente
que ela .
E quelas que tornaram a aprendizagem do Python, e suas
tecnologias, complexas o suficiente para que as pessoas
precisassem de um livro como este para aprend-las.
o autor

Autor de Use a Cabea Python

Paul Barry recentemente concluiu que vem


programando por quase um quarto de sculo, um
fato que surgiu como um choque. Nesse tempo, Paul
programou em diferentes linguagens de programao,
Paul viveu e trabalhou em dois pases em dois continentes,
casou-se, teve trs filhos (bem... na verdade, sua
esposa Deirdre os teve, mas Paul estava l), fez
bacharelado e mestrado em Informtica, escreveu
e coescreveu trs outros livros, bem como muitos
artigos tcnicos para o Linux Journal (onde ele
editor colaborador).
Quando Paul viu pela primeira vez o Use a Cabea
HTML com CSS & XHTML, amou tanto que soube
imediatamente que a abordagem do Use a Cabea
seria uma tima maneira de ensinar programao.
Ele ficou muito feliz ento em criar o Use a Cabea
Programao, junto com David Griffiths, em uma
tentativa de provar que o seu palpite estava correto.
Paul trabalha hoje como professor no Instituto
de Tecnologia, Carlow, na Irlanda. Como parte do
Departamento de Informtica e Redes, Paul comea
o seu dia explorando, aprendendo e ensinando
tecnologias da programao, incluindo o Python, aos
seus alunos.
Paul terminou recentemente seu curso de ps-
-graduao em Ensino e Aprendizagem, e ficou um
pouco mais aliviado ao descobrir que grande parte
do que ele faz est de acordo com o terceiro nvel das
melhores prticas atuais.

viii introduo
contedo (sumrio)

Contedo (Sumrio)
Introduo xxiii
1 Conhecendo o Python: Todos amam listas 1
2 Compartilhando seu cdigo: Mdulos de funes 33
3 Arquivos e Excees: Lidando com erros 73
4 Persistncia: Salvando dados em arquivos 105
5 Compreendendo os Dados: Trabalhe esses dados! 139
6 Objetos de Dados Personalizados: Reunindo cdigos com dados 173
7 Desenvolvimento Web: Juntando tudo 213
8 Desenvolvimento de aplicativo mvel: Pequenos dispositivos 255
9 Gerencie seus dados: Tratamento da entrada 293
10 Dimensionando seu aplicativo web: Caindo na real 351
11 Lidando com a complexidade: Disputa de dados 397
i Sobras: As dez melhores coisas (que no cobrimos) 435

Contedo (a coisa real)


Introduo

Seu crebro no Python. Aqui est voc tentando aprender algo,


"#$%&#'()*"%)+,-".-()/&0)()/&1(-)2")*")+"-'34+&-)$%")()&5-"#230&2()#6()*")47&-89)
:"%)+,-".-()"*'8)5"#*&#2(;)<=">?(-)2"37&-)"*5&@()5&-&)+(3*&*)=&3*)3=5(-'&#'"*A)
+(=()5(-)"7"=5>(A)$%&3*)&#3=&3*)*">1&B"#*)"13'&-)")*")5-&'3+&-)*#(C.(&-2)#%)),)
%=&)=8)32"3&D9)E#'6(A)+(=()1(+F)"#B&#&-8)*"%)+,-".-()5&-&)5"#*&-)$%")*%&)132&)
depende de conhecer Python?
A quem se destina este livro? xxiv
Sabemos o que voc est pensando xxv
Metacognio pensando sobre pensar xxvii
Force seu crebro submisso. xxix
Leia-me xxx
A equipe de reviso tcnica xxxii
Agradecimentos xxxiii

voc est aqui ! ix


contedo (sumrio)

1
conhecendo o python
Todos amam listas
Voc est fazendo uma pergunta: o que torna o Python
diferente? G)-"*5(*'&)+%-'&),;)=%3'&*)+(3*&*9)G*)-"*5(*'&*)=&3*)>(#B&*)H8)
+(="@&=)&4)-=&#2()$%")?8)=%3'&*)+(3*&*)/&=3>3&-"*)'&=.,=9)I)JK'?(#),)=%3'()
5&-"+32()+(=)$%&>$%"-)(%'-&)>3#B%&B"=)B"-&>)2")5-(B-&=&@6(A)+(=)3#*'-%@L"*A)
"75-"**L"*A)(5"-&@L"*A)/%#@L"*A)=M2%>(*A)=,'(2(*)")+>&**"*9)N(2&*)&*)+(3*&*)
?&.3'%&3*A)#&)1"-2&2"9)E#'6(A)?8)(%'-&*)+(3*&*)$%")()JK'?(#)/(-#"+")$%")'(-#&=)
&)132&)2()5-(B-&=&2(-)O)&)*%&)132&)O)%=)5(%+()=&3*)/8+3>9)P(+F)+(="@&-8)()*"%)
'(%-)#()JK'?(#)&5-"#2"#2()*(.-")&*)>3*'&*9)Q&*A)&#'"*)2")+?"B&-)>8A)?8)(%'-&)
5"-B%#'&)3=5(-'&#'")$%")5-"+3*&)*"-)-"*5(#232&999)
O que h para se gostar sobre o Python? 2
Instale o Python 3 3
Use o IDLE para ajud-lo a aprender o Python 4
Trabalhe efetivamente com o IDLE 5
Lide com dados complexos 6
Crie listas simples no Python 7
As listas so como arrays 9
Adicione mais dados sua lista 11
Trabalhe com os dados de sua lista 15
Os loops for trabalham com listas de qualquer tamanho 16
Armazene listas dentro de listas 18
Verifique uma lista para obter outra lista 20
Dados complexos so difceis de processar 23
Lide com os muitos nveis de listas aninhadas 24
No repita o cdigo; crie uma funo 28
Crie uma funo no Python 29
Recurso ao resgate 31
Sua caixa de ferramentas Python 32

ly Gr ail , 19 75, Terr y Jo ne s & Te rry Gilliam, 91 mins


The Ho
Graham Chapman Cl ees e, Te rr y Gi llia m, Eric Idle & Terry Jones
Michael Palin , Jo hn

x introduo
contedo (sumrio)

2
compartilhando seu cdigo
Mdulos de funes
Cdigo reutilizvel timo, mas mdulo compartilhvel
melhor. G()+(=5&-'3>?&-)*"%)+M23B()+(=()%=)=M2%>()JK'?(#A)1(+F)&.-")
*"%)+M23B()5&-&)&)+(=%#32&2")JK'?(#)3#'"3-&999)"),)*"=5-").(=)+(=5&-'3>?&-A)
#6(),R)S"*'")+&5T'%>(A)1(+F)&5-"#2"-8)&)+-3&-A)3#*'&>&-)")23*'-3.%3-)*"%*)5-M5-3(*)
=M2%>(*)+(=5&-'3>?81"3*9)E#'6(A)+&--"B&-8)*"%)=M2%>()#()*(/'C&-")2()*3'")2")
+(=5&-'3>?&="#'()2()JK'?(#A)5&-&)$%")'(2(*)5(**&=)&5-(1"3'&-)*"%)'-&.&>?(9)
G()>(#B()2()+&=3#?(A)1(+F)&5-"#2"-8)&>B%#*)'-%$%"*)#(1(*)-">&'31(*)U*)/%#@L"*)
JK'?(#)'&=.,=9
bom demais para no compartilhar 34
Transforme sua funo em um mdulo 35
Os mdulos esto em todos os lugares 36
Comente seu cdigo 37
Prepare sua distribuio 40
Construa sua distribuio 41
Uma rpida reviso de sua distribuio 42
Importe um mdulo para us-lo 43
Os mdulos Python implementam namespaces 45
Registrando-se no site PyPI 47
Faa o upload de seu cdigo para o PyPI 48
Bem-vindo comunidade PyPI 49
Controle o comportamento com um argumento extra 52
Antes de escrever um cdigo novo, pense no BIF 53
O Python faz o melhor para executar seu cdigo 57
Rastreie seu cdigo 58
Trabalhe no que est errado 59
Atualize o PyPI com seu novo cdigo 60
Voc mudou sua API 62
Use argumentos opcionais 63
Seu mdulo suporta as duas APIs 65
Sua API ainda no est certa 66
nester A reputao do seu mdulo restaurada 70
Sua caixa de ferramentas Python 71

nester.py
setup.py

voc est aqui ! xi


contedo (sumrio)

3
arquivos e excees
Lidando com erros
Simplesmente no suficiente processar os dados de
sua lista em seu cdigo. P(+F)5-"+3*&)/(-#"+"-)(*)2&2(*)"=)*"%*)
5-(B-&=&*)+(=)/&+3>32&2")'&=.,=9)S6(),)#"#?%=&)*%-5-"*&)$%")()JK'?(#)'(-#")
&)>"3'%-&)2(*)2&2(*)2(*)&-$%31(*)/8+3>9)I)$%"),)M'3=(A)&',)1(+F)+(#*32"-&-)()$%")
pode dar errado)&()3#'"-&B3-)+(=)2&2(*)"7'"-#(*)&(*)*"%*)5-(B-&=&*999)")?8)
muitas coisas esperando para engan-lo! Quando coisas ruins acontecem, voc
precisa de uma estratgia para solucionar o problema, e tal estratgia lidar com
$%&3*$%"-)*3'%&@L"*)"7+"5+3(#&3*)%*&#2()()="+&#3*=()2")'-&'&="#'()2")"7+"@6()
2()JK'?(#)=(*'-&2()#"*'")+&5T'%>(9
Os dados so externos ao seu programa 74
So todas linhas de texto 75
D uma olhada nos dados 77
Conhea seus dados 79
Conhea seus mtodos e pea ajuda 80
Conhea seus dados (melhor) 82
Duas abordagens muito diferentes 83
Adicione uma lgica extra 84
Lide com as excees 88
Tente primeiro, depois recupere 89
Identifique o cdigo a proteger 91
Continue com o erro 93
E os outros erros? 96
Adicione mais cdigo de verificao de erros... 97
... Ou adicione outro nvel de tratamento de exceo 98
Ento, qual abordagem a melhor? 99
Est pronto... exceto por um pequeno detalhe 101
Seja especfico em suas excees 102
Sua caixa de ferramentas Python 103

split(beans)

xii introduo
contedo (sumrio)

4
V
persistncia
Salvando dados em arquivos
muito bom ser capaz de processar seus dados
baseados em arquivos. Q&*A)()$%")&+(#'"+")+(=)*"%*)2&2(*)
quando voc termina? Claro, melhor salv-los em um arquivo do disco, o que
5"-=3'")%*8V>(*)#(1&="#'")=&3*)'&-2"9)J"B&-)(*)2&2(*).&*"&2(*)"=)="=M-3&)
")&-=&0"#8V>(*)#()23*+(),)()$%")2"4#")&)5"-*3*'F#+3&9)I)JK'?(#)*%5(-'&)'(2&*)
as ferramentas habituais para gravar os arquivos e tambm fornece algumas
facilidades legais para armazenar de!"#$%&!'()*'+,')*"%*)2&2(*9
Programas produzem dados 106
Abra seu arquivo no modo de gravao 110
Os arquivos ficam abertos aps uma exceo! 114
Estenda try com finally 115
Conhecer o tipo de erro no o suficiente 117
Use with para trabalhar com arquivos 120
Os formatos padro so inadequados para os arquivos 124
Por que no modificar print_lol()? 126
Conserve seus dados 132
Salve com dump e restaure com load 133
A E/S genrica do arquivo com pickle o caminho a seguir 137
Sua caixa de ferramentas Python 138

['Is this the right room for an


argument?', "No you haven't!",
'When?', "No you didn't!", "You
didn't!", 'You did not!', 'Ah!
(taking out his wallet and paying)
[Is this the right room
for an argument?, No
Just the five minutes.', 'You most
you havent!, When?,
No you didnt!, You
didnt!, You did not!,
Ah! (taking out his wallet
and paying) Just the five
certainly did not!', "Oh no you
minutes., You most
certainly did not!, Oh
no you didnt!, Oh no
you didnt!, Oh look,
this isnt an argument!,
didn't!", "Oh no you didn't!", "Oh
No it isnt!, Its
just contradiction!,
It IS!, You just
contradicted me!, You
look, this isn't an argument!",
DID!, You did just
then!, (exasperated)
Oh, this is futile!!,
Yes it is!] "No it isn't!", "It's just
contradiction!", 'It IS!', 'You
just contradicted me!', 'You DID!',
'You did just then!', '(exasperated)
Oh, this is futile!!', 'Yes it
is!']

voc est aqui ! xiii


contedo (sumrio)

5
compreendendo os dados
Trabalhe com dados!
Os dados tm todas as formas e tamanhos, formatos e
codificaes. J&-&)'-&.&>?&-)2")/(-=&)"4+&0)+(=)*"%*)2&2(*A)=%3'&*)1"0"*)
voc tem que manipul-los e transform-los em um formato comum para permitir
5-(+"**&="#'(A)+>&**34+&@6()")&-=&0"#&="#'()"4+3"#'"*9)S"*'")+&5T'%>(A)1(+F)
3-8)"75>(-&-)(*)&'-&'31(*)2()JK'?(#)$%")()&H%2&=)&)'-&.&>?&-)+(=)(*)2&2(*)*"=)
5-"(+%5&@L"*A)5"-=3'3#2()(.'"-)&)B-&#2"0&)2&)=%2&#@&)#">"*9
O treinador Kelly precisa de sua ajuda 140
Escolha um dos dois caminhos 144
O problema com o tempo 148
Compreendendo as listas 155
Itere para remover as duplicatas 161
Remova as duplicatas com conjuntos 166
Sua caixa de ferramentas Python 172

Garanto que este


359@)-!%&;5$A&5&#%34&
6-")%2&.B.$3@3"%2C

xiv introduo
contedo (sumrio)

6
objetos de dados personalizados
Reunindo cdigo com dados
importante coincidir sua escolha de estrutura de
dados com seus dados.E)"**&)"*+(>?&)5(2")/&0"-)%=&)B-&#2")
23/"-"#@&)#&)+(=5>"732&2")2()*"%)+M23B(9)S()JK'?(#A)&5"*&-)2")=%3'()W'"3*A)&*)
>3*'&*)")(*)+(#H%#'(*)#6()*6()&*)W#3+&*)(5@L"*9)I)dicionrio Python permite
que voc organize seus dados para fazer uma pesquisa rpida &--#)*&+.# seus
dados )#%!+#%'-A)#6()#W="-(*9)E)$%&#2()&*)"*'-%'%-&*)2")2&2(*)5-"2"4#32&*)
2()JK'?(#)#6()*"-1"=)."=A)&)3#*'-%@6()2&)classe)JK'?(#)5"-=3'")$%")1(+F)2"4#&)
%=&)5-M5-3&9)E*'")+&5T'%>()=(*'-&)+(=()/&0"-9
O treinador Kelly est de volta (com um novo
formato de arquivo) 174
Use um dicionrio para associar dados 178
Agrupe seu cdigo e seus dados em uma classe 189
Defina uma classe 190
Use a classe para definir classes 191
A importncia de self 192
O primeiro argumento de cada mtodo self 193
Herde a lista predefinida do Python 204
O treinador Kelly est impressionado 211
Sua caixa de ferramentas Python 212

voc est aqui ! xv


contedo (sumrio)

7
desenvolvimento web
Juntando tudo
Cedo ou tarde, voc vai querer compartilhar seu
aplicativo com muitas pessoas. P(+F)'"=)=%3'&*)(5@L"*)5&-&)
/&0"-)3**(9)G.-&)*"%)+M23B()#()JKJXA)"#13")=%3'(*)"V=&3>*A)+(>($%")*"%)+M23B()
em um CD ou USB, ou simplesmente instale seu aplicativo manualmente nos
+(=5%'&2(-"*)2&*)5"**(&*)$%")5-"+3*&=)2">"9)J&-"+")=%3'()'-&.&>?(*(999)*"=)
="#+3(#&-)&)+?&'3+"9)G>,=)23**(A)()$%")&+(#'"+")$%&#2()1(+F)5-(2%0)%=&)
1"-*6()=">?(-)2()*"%)+M23B(R)I)$%")&+(#'"+"A)"#'6(R)Y(=()1(+F)B"-"#+3&)
&)&'%&>30&@6(R)E#+&-"=(*;),)%=)5-(.>"=&)'&>)$%")1(+F)-"&>="#'")3#1"#'&-8)
2"*+%>5&*)+-3&'31&*)5&-&)#6()/&0FV>(9)Z">30="#'"A)1(+F)#6()5-"+3*&)/&0"-)#&2&)
23**(;).&*'&)+-3&-)%=)&5>3+&'31()C".9)E)+(=()"*'")+&5T'%>()2"=(#*'-&A)%*&-)()
JK'?(#)5&-&)()2"*"#1(>13="#'()C".),)/8+3>9
bom compartilhar 214
Voc pode colocar seu programa na Web 215
O que o aplicativo web precisa fazer? 218
Planeje seu aplicativo web com MVC 221
Modele seus dados 222
Visualize sua interface 226
Controle seu cdigo 234
O CGI permite que seu servidor web execute programas 235
Exiba a lista de atletas 236
O temido erro 404! 242
Crie outro script CGI 244
Ative o rastreamento CGI para ajudar com os erros 248
Uma pequena mudana pode fazer toda a diferena 250
Seu aplicativo web um sucesso! 252
Sua caixa de ferramentas Python 253

xvi introduo
contedo (sumrio)

8
desenvolvimento de aplicativo mvel
Pequenos dispositivos
Colocar seus dados na web abre todos os tipos de
possibilidades. [%&>$%"-)5"**(&)2")$%&>$%"-)>%B&-)5(2")#6()*M)3#'"-&B3-)
+(=)*"%)&5>3+&'31()C".A)+(=()'&=.,=)"*'8A)+&2&)1"0)=&3*A)/&0"#2()3**()&)5&-'3-)
2")%=&)+(>"@6()2")231"-*(*)23*5(*3'31(*)2")+(=5%'&@6(;)JY*A)>&5'(5*A)'&.>"'*A)
5&>='(5*)")&',)'">"/(#"*)+">%>&-"*9)E)#6()*6())*M)(*)?%=&#(*)$%")3#'"-&B"=)+(=)
()*"%)&5>3+&'31()C".)+(=)(*)$%&3*)1(+F)'"=)$%")*")5-"(+%5&-)")*%5(-'&-;)/#,-)*6()
5"$%"#(*)5-(B-&=&*)$%")5(2"=)&%'(=&'30&-)&*)3#'"-&@L"*)\".)")#(-=&>="#'")
2"*"H&=)*"%*)2&2(*A)#6()*"%)&=3B81">)]NQ^9)S"*'")+&5T'%>(A)1(+F)3-8)"75>(-&-)()
JK'?(#)#()+">%>&-)2()'-"3#&2(-)_">>K)5&-&)"*+-"1"-)%=)&5>3+&'31()$%")3#'"-&H&)+(=)
(*)2&2(*)2()*"%)&5>3+&'31()C".9)
O mundo est ficando menor 256
O treinador Kelly est no Android 257
No se preocupe com o Python 2 259
Configure seu ambiente de desenvolvimento 260
Configure o SDK e o emulador 261
Instale e configure o Android Scripting 262
Adicione o Python sua instalao SL4A 263
Teste o Python no Android 264
Defina as exigncias do seu aplicativo 266
A API do SL4A Android 274
Selecione em uma lista no Android 278
O script CGI de dados do atleta 281
Os dados parecem ter mudado de tipo 284
O JSON no pode lidar com seus
tipos de dados personalizados 285
Execute o aplicativo em um telefone real 288
Configure o AndFTP 289
O treinador est feliz com seu aplicativo 290
Sua caixa de ferramentas Python 291

voc est aqui ! xvii


contedo (sumrio)

9
gerencie seus dados
Tratamento da entrada
A Web e o seu telefone no so apenas timas maneiras
de exibir dados.N&=.,=)*6()M'3=&*)/"--&="#'&*)5&-&)&+"3'&-)&)"#'-&2&)2")
*"%*)%*%8-3(*9)S&'%-&>="#'"A)%=&)1"0)$%")*"%)&5>3+&'31()C".)&+"3'&)2&2(*A)">")
precisa coloc-los em algum lugar e as escolhas que voc faz quando decide quais
*6()")(#2")"*'6()<"**"*)>%B&-"*D)*6(A)=%3'&*)1"0"*A)&)23/"-"#@&)"#'-")%=)&5>3+&'31()
C".)/8+3>)2")&%="#'&-)")"*'"#2"-A)")%=)$%")#6(),9)S"*'")+&5T'%>(A)1(+F)"*'"#2"-8)
*"%)&5>3+&'31()C".)5&-&)&+"3'&-)(*)2&2(*)2&)C".)`&'-&1,*)2")%=)#&1"B&2(-)(%)%=)
'">"/(#")G#2-(32aA)."=)+(=()1"-8)")&5"-/"3@(&-8)*"%*)*"-13@(*)2")B"-"#+3&="#'()2(*)
dados de /&)01'+.9
O aplicativo dos tempos dos atletas obteve
alcance nacional 294
Use um formulrio ou uma caixa de dilogo para
aceitar a entrada 295
Crie um modelo de formulrio HTML 296
Os dados so entregues ao seu script CGI 300
Pea a entrada em seu telefone Android 304
hora de atualizar os dados do seu servidor 308
Evite as condies race 309
Voc precisa de um mecanismo de
armazenamento de dados melhor 310
Use um sistema de gerenciamento do banco de dados 312
Python inclui o SQLite 313
Explore a API do banco de dados do Python 314
A API do banco de dados como cdigo Python 315
Um pequeno projeto de banco de dados vai longe 316
Defina seu esquema do banco de dados 317
Como so os dados? 318
Transfira os dados do arquivo pickle para o SQLite 321
Qual ID atribudo a qual atleta? 322
Insira seus dados de tempo 323
Ferramentas de gerenciamento de dados SQLite 326
Integre o SQLite em seu aplicativo web existente 327
Voc ainda precisa da lista dos nomes 332
Obtenha os detalhes de um atleta com base no ID 333
Voc precisa corrigir seu aplicativo Android tambm 342
Atualize os dados do atleta com base no SQLite 348
A NUAC est na lua! 349
Sua caixa de ferramentas Python 350

xviii introduo
contedo (sumrio)

10
dimensionando seu aplicativo web
Caindo na real
A web um timo lugar para hospedar seu aplicativo...
at que as coisas caiam na real. Cedo ou tarde, voc ir tirar a
*(-'")B-&#2")")*"%)&5>3+&'31()C".)*"-8)%=)-2)'--#!'-,$#+.#-#9)[%&#2()3**()
&+(#'"+"-A)*"%)&5>3+&'31()C".)5&**&-8)2")%=)5%#?&2()2")&+"**(*)5(-)23&)5&-&)
milhares, possivelmente dezenas de milhares ou &,3!%&*-9)P(+F)"*'&-8)5-(#'(R)
:"%)*"-132(-)\".)>32&-8)+(=)&)carga? Como voc saber? Qual ser o custo?
Quem pagarR):"%)=(2">()2")2&2(*)5(2")23="#*3(#&-V*")5&-&)=3>?L"*)")=3>?L"*)
de itens de dados sem -'!&$$&-,&$R)N"-)%=)&5>3+&'31()C".)3#*'&>&2()")/%#+3(#&#2()
,)/8+3>)+(=)()JK'?(#)")&B(-&A)B-&@&*)&()b((B>")G55)E#B3#"A)dimensionar um
&5>3+&'31()C".)JK'?(#),)5(**T1">)'&=.,=9
Existem observadores de baleias em todos os lugares 352
O HFWWG precisa automatizar-se 353
Construa um aplicativo web com o Google App Engine 354
Baixe e instale o App Engine 355
Certifique-se que o App Engine esteja funcionando 356
O App Engine usa o padro MVC 359
Modele seus dados com o App Engine 360
Para que serve um modelo sem visualizao? 363
Use modelos no App Engine 364
A estrutura de validao de formulrio do Django 368
Verifique seu formulrio 369
Controlando seu aplicativo web App Engine 370
Limite a entrada fornecendo opes 376
Conhea a tela em branco da morte 378
Processe o POST em seu aplicativo web 379
Coloque seus dados em um armazenamento de dados 380
No quebre o princpio da robustez 384
Aceite praticamente qualquer data e hora 385
Parece que voc no acabou ainda 388
s vezes, a menor mudana pode fazer toda a diferena... 389
Capture o Google ID de seu usurio tambm 390
Implemente seu aplicativo web na nuvem do Google 391
Seu aplicativo Web HFWWG est implementado! 394
Sua caixa de ferramentas Python 395

voc est aqui ! xix


contedo (sumrio)

11
lidando com a complexidade
Disputa de dados
timo quando voc pode aplicar o Python a uma rea
de domnio especfico. :"H&)%=).'-'+4#54*%'+,#!6'/, 7'$'+)*&%'+,#!
.#!/&+)#!.'!.&.#-A)*"H&=)&5>3+&'31(*)=M1"3*A)()JK'?(#)&H%2&)1(+F)&)/&0"-)()
trabalho +8#)&'-&5&>?&#2()()=(2()+(=()+(234)+&)*%&)*(>%@6(9)E)2"5(3*A)?8)(%'-(*)
'35(*)2")5-(.>"=&*;)&$%">"*)$%")1(+F)#6()5(2")+&'"B(-30&-)(%)&#"7&-)&)%=)
2(=T#3(9)J-(.>"=&*)$%")"=)*3)*6()'6()9+*)#-, que voc tem que v-los de uma
=&#"3-&)23/"-"#'")")&>'&="#'")"*5"+T4)+&9)Y-3&-)*(>%@L"*)2")*(/'C&-")*(.)="232&)
para esses tipos de problemas uma rea onde o Python -'!.'-,&)&9)S"*'")*"%)
+&5T'%>()4)#&>A)1(+F)'-,'+.'$: suas habilidades no Python ao limite e resolver
5-(.>"=&*)&()>(#B()2()+&=3#?(9)
Qual uma boa meta de tempo para a prxima corrida? 398
Ento... qual o problema? 400
Comece com os dados 401
Armazene cada tempo como um dicionrio 407
Disseque o cdigo de previso 409
Obtenha a entrada a partir do seu usurio 413
Obter entrada gera um problema 414
Pesquise a correspondncia mais prxima 416
O problema est no tempo 418
O mdulo hora-segundos-hora 419
O problema ainda est no tempo... 422
Porta para o Android 424
Seu aplicativo Android um monte de caixas de dilogos 425
Rena seu aplicativo 429
Seu aplicativo est pronto! 431
Sua caixa de ferramentas Python 432

xx introduo
contedo (sumrio)

i
sobras
As dez melhores coisas (que no cobrimos)
Voc percorreu um longo caminho. Q&*A)&5-"#2"-)()JK'?(#),)
%=&)&'3132&2")$%")#%#+&)5&-&9)[%&#'()=&3*)JK'?(#)1(+F)+(234)+&-A)=&3*)5-"+3*&-8)
&5-"#2"-)#(1&*)=&#"3-&*)2")/&0"-)+"-'&*)+(3*&*9)P(+F)5-"+3*&-8)2(=3#&-)#(1&*)
/"--&="#'&*)")#(1&*)',+#3+&*)'&=.,=9):3=5>"*="#'")#6()?8)"*5&@()*%4)+3"#'")
neste livro para mostrar tudo o que voc possivelmente precisaria saber sobre o
JK'?(#9)E#'6(A)&$%3)1&3)#(**&)>3*'&)2&*)2"0)=">?(-"*)+(3*&*)$%")#6()+(.-3=(*)")
$%")1(+F)5(2")$%"-"-)*&."-)=&3*)#&)5-M73=&)1"09)
1: Usando um IDE profissional 436
2: Lutando com o escopo 437
3: Testando 438
4: Os recursos avanados da linguagem 439
5: Expresses regulares 440
6: Mais sobre as estruturas Web 441
7: Mapeadores relacionais do objeto e NoSQL 442
8: Programando as GUIs 443
9: Coisas a evitar 444
10: Outros livros 445

voc est aqui ! xxi

Você também pode gostar