Baixar capítulo de amostra

Propaganda
Primeiros Elogios ao Use a Cabeça! Python
“O Use a Cabeça! Python é uma ótima introdução sobre como a linguagem Python é
usada no mundo real. O livro vai além 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 começam com a teoria e passam para os exemplos, o Use a Cabeça!
Python salta diretamente para o código e explica a teoria à medida em que você lê.
Este é um ambiente muito mais eficaz de aprendizagem porque envolve o leitor desde
o início. Foi uma alegria lê-lo. Foi divertido, sem ser petulante e informativo sem ser
condescendente. A amplitude de exemplos e explicações abrange a maior parte do
que você faz em seu trabalho diário. Eu recomendo este livro a qualquer um que esteja
começando no Python.”
— Jeremy Jones, coautor do Python for Unix and Linux System Administration
“O Use a Cabeça Python é um livro ótimo para começar a se aprimorar em uma linguagem
que é cada vez mais relevante.”
— Phil Hartley, Universidade de Avanço Tecnológico
Elogios sobre outros livros da série
“O Use a Cabeça! Java, de Kathy e Bert transforma a página impressa na coisa mais próxima à
interface gráfica do usuário que você já viu. Em tom irônico, de maneira descolada, os autores
tornam o aprendizado do Java uma experiência envolvente do tipo ‘o que você fará em seguida?’”
— Warren Keuffel, Software Development Magazine
“Além do estilo envolvente que o leva de leigo para o status de guerreiro Java, o Use a Cabeça! Java
abrange uma enorme quantidade de questões práticas que os outros livros abandonam, como o
temido ‘exercício para o leitor...’. É inteligente, irônico, descolado e prático – não há muitos livros
que podem fazer essa reivindicação e viver de acordo com ela, enquanto também ensinam sobre a
serialização do objeto e os protocolos de inicialização da rede.”
— Dr. Dan Russell, Diretor de Ciências e Pesquisa da Experiência do Usuário
Centro de Pesquisa Almaden da IBM (e ensina Inteligência Artificial na
Universidade de Stanford)
“É rápido, irreverente, divertido e cativante. Tenha cuidado – você pode realmente
aprender algo!”
— Ken Arnold, ex-engenheiro sênior da Sun Microsystems e coautor
(com James Gosling, criador do Java), Linguagem de Programação Java
“Eu sinto como se o peso de milhares de livros acabasse de ser retirado da minha cabeça.”
— Ward Cunningham, inventor do Wiki e fundador do grupo Hillside
“O tom certo para o guru entendido, casual e legal em todos nós. A referência certa para
as estratégias de desenvolvimento prático – faz meu cérebro avançar 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ê mantém em sua mesa
e, graças à O’Reilly e à equipe do Use a Cabeça!, existem livros Use a Cabeça!. Eles são os
únicos que estão com as orelhas dobradas, deformados e são levados a todos os lugares. O
Use a Cabeça! SQL está no topo da minha pilha. Ah, até o PDF que tenho para revisão está
surrado e rasgado.”
— Bill Sawyer, Gerente de Currículos ATG, Oracle
“A admirável clareza, humor e doses substanciais de inteligência fazem deste o tipo de livro
que ajuda até os não programadores a pensar bem sobre a resolução 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 série
“Eu recebi o livro ontem e comecei a lê-lo... e não consegui parar. Isto é definitivamente
très ‘legal’. É divertido e eles abordam muita coisa. Estão 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 capítulo, cada conceito transmitido em doses
iguais de pragmatismo e inteligência.”
— Ken Goldstein, Vice-Presidente executivo da Disney Online
“Eu ! o Use a Cabeça 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 padrões de projetos, tenho que
ficar de olho em alguma coisa só para me certificar que estava prestando atenção. Não é o
caso. Por mais estranho que possa parecer, este livro torna divertido o aprendizado sobre
padrões de projetos.”
“Enquanto outros livros sobre padrões de projetos estão dizendo ‘Bueller... Bueller...
Bueller...’, este está sobre o carro alegórico, cantando‘Shake 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 série Use a Cabeça!
!"#$%$&%'#(%)$*+%,$-./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 Cabeça! Python
Não 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 programação 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 Cabeça Python
Paul Barry recentemente concluiu que vem
Paul
programando por quase um quarto de século, um
fato que surgiu como um choque. Nesse tempo, Paul
programou em diferentes linguagens de programação,
viveu e trabalhou em dois países em dois continentes,
casou-se, teve três filhos (bem... na verdade, sua
esposa Deirdre os teve, mas Paul estava lá), fez
bacharelado e mestrado em Informática, escreveu
e coescreveu três outros livros, bem como muitos
artigos técnicos para o Linux Journal (onde ele é
editor colaborador).
Quando Paul viu pela primeira vez o Use a Cabeça
HTML com CSS & XHTML, amou tanto que soube
imediatamente que a abordagem do Use a Cabeça
seria uma ótima maneira de ensinar programação.
Ele ficou muito feliz então em criar o Use a Cabeça
Programação, 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 Informática e Redes, Paul começa
o seu dia explorando, aprendendo e ensinando
tecnologias da programação, incluindo o Python, aos
seus alunos.
Paul terminou recentemente seu curso de pós-graduação 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 nível das
melhores práticas atuais.
viii introdução
conteúdo (sumário)
Conteúdo (Sumário)
1
2
3
4
5
6
7
8
9
10
11
i
Introdução
Conhecendo o Python: Todos amam listas
Compartilhando seu código: Módulos de funções
Arquivos e Exceções: Lidando com erros
Persistência: Salvando dados em arquivos
Compreendendo os Dados: Trabalhe esses dados!
Objetos de Dados Personalizados: Reunindo códigos com dados
Desenvolvimento Web: Juntando tudo
Desenvolvimento de aplicativo móvel: Pequenos dispositivos
Gerencie seus dados: Tratamento da entrada
Dimensionando seu aplicativo web: Caindo na real
Lidando com a complexidade: Disputa de dados
Sobras: As dez melhores coisas (que não cobrimos)
xxiii
1
33
73
105
139
173
213
255
293
351
397
435
Conteúdo (a coisa real)
Introdução
Seu cérebro 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?
Sabemos o que você está pensando
Metacognição pensando sobre pensar
Force seu cérebro à submissão.
Leia-me
A equipe de revisão técnica
Agradecimentos
xxiv
xxv
xxvii
xxix
xxx
xxxii
xxxiii
você está aqui !
ix
conteúdo (sumário)
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?
Instale o Python 3
Use o IDLE para ajudá-lo a aprender o Python
Trabalhe efetivamente com o IDLE
Lide com dados complexos
Crie listas simples no Python
As listas são como arrays
Adicione mais dados à sua lista
Trabalhe com os dados de sua lista
Os loops for trabalham com listas de qualquer tamanho
Armazene listas dentro de listas
Verifique uma lista para obter outra lista
Dados complexos são difíceis de processar
Lide com os muitos níveis de listas aninhadas
Não repita o código; crie uma função
Crie uma função no Python
Recursão ao resgate
Sua caixa de ferramentas Python
rry Gilliam, 91 mins
Te
&
s
ne
Jo
y
rr
Te
,
75
19
,
ail
Gr
ly
Ho
The
Graham Chapman
Idle & Terry Jones
ic
Er
m,
llia
Gi
y
rr
Te
e,
ees
Cl
hn
Jo
,
Michael Palin
x
introdução
2
3
4
5
6
7
9
11
15
16
18
20
23
24
28
29
31
32
conteúdo (sumário)
2
compartilhando seu código
Módulos de funções
Código reutilizável é ótimo, mas módulo compartilhável
é 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
nester
É bom demais para não compartilhar
Transforme sua função em um módulo
Os módulos estão em todos os lugares
Comente seu código
Prepare sua distribuição
Construa sua distribuição
Uma rápida revisão de sua distribuição
Importe um módulo para usá-lo
Os módulos Python implementam namespaces
34
35
36
37
40
41
42
43
45
Registrando-se no site PyPI
Faça o upload de seu código para o PyPI
Bem-vindo à comunidade PyPI
Controle o comportamento com um argumento extra
Antes de escrever um código novo, pense no BIF
O Python faz o melhor para executar seu código
Rastreie seu código
Trabalhe no que está errado
Atualize o PyPI com seu novo código
Você mudou sua API
Use argumentos opcionais
Seu módulo suporta as duas APIs
Sua API ainda não está certa
A reputação do seu módulo é restaurada
Sua caixa de ferramentas Python
47
48
49
52
53
57
58
59
60
62
63
65
66
70
71
nester.py
setup.py
você está aqui !
xi
conteúdo (sumário)
3
arquivos e exceções
Lidando com erros
Simplesmente não é suficiente processar os dados de
sua lista em seu código. 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 estratégia para solucionar o problema, e tal estratégia é lidar com
$%&3*$%"-)*3'%&@L"*)"7+"5+3(#&3*)%*&#2()()="+&#3*=()2")'-&'&="#'()2")"7+"@6()
2()JK'?(#)=(*'-&2()#"*'")+&5T'%>(9
Os dados são externos ao seu programa
São todas linhas de texto
Dê uma olhada nos dados
Conheça seus dados
Conheça seus métodos e peça ajuda
Conheça seus dados (melhor)
Duas abordagens muito diferentes
Adicione uma lógica extra
Lide com as exceções
Tente primeiro, depois recupere
Identifique o código a proteger
Continue com o erro
E os outros erros?
Adicione mais código de verificação de erros...
... Ou adicione outro nível de tratamento de exceção
Então, qual abordagem é a melhor?
Está pronto... exceto por um pequeno detalhe
Seja específico em suas exceções
Sua caixa de ferramentas Python
split(beans)
xii
introdução
74
75
77
79
80
82
83
84
88
89
91
93
96
97
98
99
101
102
103
conteúdo (sumário)
V
4
persistência
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 também fornece algumas
facilidades legais para armazenar de!"#$%&!'()*'+,')*"%*)2&2(*9
Programas produzem dados
Abra seu arquivo no modo de gravação
Os arquivos ficam abertos após uma exceção!
Estenda try com finally
Conhecer o tipo de erro não é o suficiente
Use with para trabalhar com arquivos
Os formatos padrão são inadequados para os arquivos
Por que não modificar print_lol()?
Conserve seus dados
Salve com dump e restaure com load
A E/S genérica do arquivo com pickle é o caminho a seguir
Sua caixa de ferramentas Python
[‘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) Just the five
minutes.’, ‘You most
certainly did not!’, “Oh
no you didn’t!”, “Oh no
you didn’t!”, “Oh look,
this isn’t an argument!”,
“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!’]
106
110
114
115
117
120
124
126
132
133
137
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)
Just the five minutes.', 'You most
certainly did not!', "Oh no you
didn't!", "Oh no you didn't!", "Oh
look, this isn't an argument!",
"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
conteúdo (sumário)
5
compreendendo os dados
Trabalhe com dados!
Os dados têm todas as formas e tamanhos, formatos e
codificações. 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
Escolha um dos dois caminhos
O problema com o tempo
Compreendendo as listas
Itere para remover as duplicatas
Remova as duplicatas com conjuntos
Sua caixa de ferramentas Python
Garanto que este
359@)-!%&;5$A&5&#%34&
6-")%2&.B.$3@3"%2C
xiv introdução
140
144
148
155
161
166
172
conteúdo (sumário)
6
objetos de dados personalizados
Reunindo código 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)dicionário Python permite
que você organize seus dados para fazer uma pesquisa rápida &--#)*&+.# 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)
Use um dicionário para associar dados
Agrupe seu código e seus dados em uma classe
Defina uma classe
Use a classe para definir classes
A importância de self
O primeiro argumento de cada método é self
Herde a lista predefinida do Python
O treinador Kelly está impressionado
Sua caixa de ferramentas Python
você está aqui !
174
178
189
190
191
192
193
204
211
212
xv
conteúdo (sumário)
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
Você pode colocar seu programa na Web
O que o aplicativo web precisa fazer?
Planeje seu aplicativo web com MVC
Modele seus dados
Visualize sua interface
Controle seu código
O CGI permite que seu servidor web execute programas
Exiba a lista de atletas
O temido erro 404!
Crie outro script CGI
Ative o rastreamento CGI para ajudar com os erros
Uma pequena mudança pode fazer toda a diferença
Seu aplicativo web é um sucesso!
Sua caixa de ferramentas Python
xvi introdução
214
215
218
221
222
226
234
235
236
242
244
248
250
252
253
conteúdo (sumário)
8
desenvolvimento de aplicativo móvel
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
O treinador Kelly está no Android
Não se preocupe com o Python 2
Configure seu ambiente de desenvolvimento
Configure o SDK e o emulador
Instale e configure o Android Scripting
Adicione o Python à sua instalação SL4A
Teste o Python no Android
Defina as exigências do seu aplicativo
A API do SL4A Android
Selecione em uma lista no Android
O script CGI de dados do atleta
Os dados parecem ter mudado de tipo
O JSON não pode lidar com seus
tipos de dados personalizados
Execute o aplicativo em um telefone real
Configure o AndFTP
O treinador está feliz com seu aplicativo
Sua caixa de ferramentas Python
256
257
259
260
261
262
263
264
266
274
278
281
284
285
288
289
290
291
você está aqui ! xvii
conteúdo (sumário)
9
gerencie seus dados
Tratamento da entrada
A Web e o seu telefone não são 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
Use um formulário ou uma caixa de diálogo para
aceitar a entrada
Crie um modelo de formulário HTML
Os dados são entregues ao seu script CGI
Peça a entrada em seu telefone Android
É hora de atualizar os dados do seu servidor
Evite as condições race
Você precisa de um mecanismo de
armazenamento de dados melhor
Use um sistema de gerenciamento do banco de dados
Python inclui o SQLite
Explore a API do banco de dados do Python
A API do banco de dados como código Python
Um pequeno projeto de banco de dados vai longe
Defina seu esquema do banco de dados
Como são os dados?
Transfira os dados do arquivo pickle para o SQLite
Qual ID é atribuído a qual atleta?
Insira seus dados de tempo
Ferramentas de gerenciamento de dados SQLite
Integre o SQLite em seu aplicativo web existente
Você ainda precisa da lista dos nomes
Obtenha os detalhes de um atleta com base no ID
Você precisa corrigir seu aplicativo Android também
Atualize os dados do atleta com base no SQLite
A NUAC está na lua!
Sua caixa de ferramentas Python
xviii introdução
294
295
296
300
304
308
309
310
312
313
314
315
316
317
318
321
322
323
326
327
332
333
342
348
349
350
conteúdo (sumário)
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 pagaráR):"%)=(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
O HFWWG precisa automatizar-se
Construa um aplicativo web com o Google App Engine
Baixe e instale o App Engine
Certifique-se que o App Engine esteja funcionando
O App Engine usa o padrão MVC
Modele seus dados com o App Engine
Para que serve um modelo sem visualização?
Use modelos no App Engine
A estrutura de validação de formulário do Django
Verifique seu formulário
Controlando seu aplicativo web App Engine
Limite a entrada fornecendo opções
Conheça a “tela em branco da morte”
Processe o POST em seu aplicativo web
Coloque seus dados em um armazenamento de dados
Não quebre o “princípio da robustez”
Aceite praticamente qualquer data e hora
Parece que você não acabou ainda
Às vezes, a menor mudança pode fazer toda a diferença...
Capture o Google ID de seu usuário também
Implemente seu aplicativo web na nuvem do Google
Seu aplicativo Web HFWWG está implementado!
Sua caixa de ferramentas Python
352
353
354
355
356
359
360
363
364
368
369
370
376
378
379
380
384
385
388
389
390
391
394
395
você está aqui ! xix
conteúdo (sumário)
11
lidando com a complexidade
Disputa de dados
É ótimo quando você pode aplicar o Python a uma área
de domínio específico. :"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 próxima corrida?
Então... qual é o problema?
Comece com os dados
Armazene cada tempo como um dicionário
Disseque o código de previsão
Obtenha a entrada a partir do seu usuário
Obter entrada gera um problema
Pesquise a correspondência mais próxima
O problema está no tempo
O módulo hora-segundos-hora
O problema ainda está no tempo...
Porta para o Android
Seu aplicativo Android é um monte de caixas de diálogos
Reúna seu aplicativo
Seu aplicativo está pronto!
Sua caixa de ferramentas Python
xx
introdução
398
400
401
407
409
413
414
416
418
419
422
424
425
429
431
432
conteúdo (sumário)
i
sobras
As dez melhores coisas (que não 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”
2: Lutando com o escopo
3: Testando
4: Os recursos avançados da linguagem
5: Expressões regulares
6: Mais sobre as estruturas Web
7: Mapeadores relacionais do objeto e NoSQL
8: Programando as GUIs
9: Coisas a evitar
10: Outros livros
436
437
438
439
440
441
442
443
444
445
você está aqui ! xxi
Download