Você está na página 1de 40

Mergulhando no Python

Dive Into Python


8 October 2003
Copyright 2000, 2001, 2002, 2003 Mark Pilgrim
Este livro est ispo!"vel em http#$$ivei!topytho!%org$% Caso este&a le!o em alg'm o'tro l'gar s'a
vers(o poe estar esat'ali)aa %
Permissio! is gra!te to copy, istrib'te, a!$or moi*y this oc'me!t '!er the terms o* the +,-
.ree /oc'me!tatio! 0ice!se, 1ersio! 1%1 or a!y later versio! p'blishe by the .ree 2o*t3are
.o'!atio!4 3ith !o 5!varia!t 2ectio!s, !o .ro!t6Cover 7e8ts, a! !o 9ack6Cover 7e8ts% : copy o*
the lice!se is i!cl'e i! GNU Free Documentation License%
7he e8ample programs i! this book are *ree so*t3are4 yo' ca! reistrib'te a!$or moi*y them '!er
the terms o* the Pytho! lice!se as p'blishe by the Pytho! 2o*t3are .o'!atio!% : copy o* the
lice!se is i!cl'e i! Python 2.1.1 license%
Table of Contents
1% 5!stala!o o Pytho!
1%1% ;'al Pytho! < o certo para voc=>
1%2% Pytho! em ?i!o3s
1%3% Pytho! !o Mac O2 @
1%A% Pytho! !o Mac O2 B
1%C% Pytho! !o DeEat 0i!'8
1%F% Pytho! !o /ebia! +,-$0i!'8
1%G% 5!stala!o a partir o cHigo *o!te
1%8% O i!terpretaor i!terativo
1%B% Des'mo
2% Co!hece!o o Pytho!
2%1% Merg'lha!o
2%2% /eclara!o *'!IJes
2%3% /oc'me!ta!o *'!IJes
2%A% 7'o < ob&eto
2%C% 5!e!ta!o cHigo
2%F% 7esta!o mH'los
2%G% :prese!ta!o icio!rios
2%8% :prese!ta!o listas
2%B% :prese!ta!o t'plas
2%10% /eclara!o variveis
2%11% :trib'i!o mKltiplos valores e 'ma ve)
2%12% .ormata!o stri!gs
2%13% Mapea!o listas
2%1A% -!i!o listas e separa!o stri!gs
2%1C% Des'mo
3% O poer a i!trospecI(o
3%1% Merg'lha!o
3%2% :rg'me!tos opcio!ais e !omeaos
3%3% type, str, ir, e o'tras *'!IJes i!ter!as
3%A% E8trai!o re*er=!cias a ob&etos com getattr
3%C% .iltra!o listas
3%F% : !at're)a pec'liar e a! e or
Chapter 1. Instalando o Python
1%1% ;'al Pytho! < o certo para voc=>
1%2% Pytho! em ?i!o3s
1%3% Pytho! !o Mac O2 @
1%A% Pytho! !o Mac O2 B
1%C% Pytho! !o DeEat 0i!'8
1%F% Pytho! !o /ebia! +,-$0i!'8
1%G% 5!stala!o a partir o cHigo *o!te
1%8% O i!terpretaor i!terativo
1%B% Des'mo
1.1. Qual Python o certo para voc
9em6vi!o ao Pytho!% 1amos merg'lhar%
: primeira coisa L'e voc= precisa *a)er com Pytho! < i!stalar% O' !(o> 2e voc= est 'sa!o 'ma
co!ta hospeaa em 'm proveor, Pytho! poe & estar i!stalao% : maioria as istrib'iIJes 0i!'8
i!stala Pytho! por par(o% O Mac O2 @ 10%2 o' posterior & vem com 'ma vers(o li!ha e coma!o
e Pytho!, embora provavelme!te voc= L'eira escolher 'ma vers(o com 'ma i!ter*ace gr*ica !o
estilo Mac%
O ?i!o3s !(o vem com Pytho!% Mas !(o se preoc'peM E iversas *ormas *ceis e e!trar !o
m'!o Pytho! 'sa!o ?i!o3s%
Como voc= poe ver, Pytho! roa em m'itos sistemas operacio!ais% : lista completa i!cl'i ?i!o3s,
o Mac O2, o Mac O2 @ e toos os vrios sistemas grat'itos compat"vel com -,5@ como o prHprio
0i!'8% E tamb<m versJes L'e roam !o 2'! 2olaris, :2$A00, :miga, O2$2, 9eO2 e m'itas o'tras
plata*ormas L'e voc= provavelme!te !'!ca o'vi' *alar%
E o L'e < melhor, programas Pytho! escritos em 'ma plata*orma poem, com 'm po'co e c'iao,
roar em qualquer plata*orma s'portaa% Por e8emplo, e' reg'larme!te ese!volvo programas Pytho!
!o ?i!o3s e mais tare os e8ec'to !o 0i!'8%
1olta!o N perg'!ta L'e abri' esta seI(o# OL'al Pytho! < o certo para voc=>P : resposta < OaL'ele
L'e roa !o comp'taor L'e voc= temP
1.!. Python e" #indo$s
,o ?i!o3s, voc= tem iversas escolhas para i!stalar o Pytho!%
: :ctive2tate tem 'm i!stalaor Pytho! para ?i!o3s L'e i!cl'i a vers(o completa o Pytho!, 'm
5/E com 'm eitor e cHigo e e8te!sJes ?i!o3s para o Pytho! L'e permitem acesso a serviIos
espec"*icos o ?i!o3s, s'as :P5s e o registro%
O :ctivePytho! poe ser bai8ao grat'itame!te, mas !(o < ope! so'rce% .oi com ele L'e e' apre!i a
'sar Pytho!, e recome!o L'e voc= 'se a !(o ser L'e te!ha alg'm motivo em partic'lar para o evitar%
Q-m esses motivos poe ser o *ato a :ctive2tate emorar alg'!s meses para at'ali)ar o
:ctivePytho! com a Kltima vers(o e Pytho! ispo!"vel% 2e voc= realme!te precisa a Kltima vers(o
o Pytho! e o :ctivePytho! ai!a est esat'ali)ao, p'le para a opI(o 2%R
Procedure 1.1. %p&'o 1( Instalando o )ctivePython
1% 9ai8e o :ctivePytho! em http#$$333%activestate%com$Pro'cts$:ctivePytho!$%
2% 2e voc= 'sa ?i!o3s BC, ?i!o3s B8 o' ?i!o3s ME, eve i!stalar o ?i!o3s 5!staller 2%0
a!tes e co!ti!'ar%
3% /= 'm cliL'e 'plo !o arL'ivo ActivePython-2.2.2-224-win32-ix86.msi%
A% 2iga as i!str'IJes !a tela%
C% 2e se' espaIo em isco *or limitao, < poss"vel *a)er 'ma i!stalaI(o perso!ali)aa QSc'stomSR e
ei8ar e i!stalar a oc'me!taI(o, mas isso !(o < recome!ao a !(o ser L'e voc= !(o realme!te
!(o possa gastar 1A megabytes a mais%
F% :pHs o t<rmi!o a i!stalaI(o, *eche o i!stalaor e abra 5!iciar6TProgramas6T:ctive2tate
:ctivePytho! 2%26TPytho!?i! 5/E%
*+a"ple 1.1. ID* )ctivePython
PythonWin 2.2.2 (#37, Nov 26 2002, 102437! "#$% 32 &it ('nte(!) on win32.
Po*tions %o+y*i,ht 1--4-2001 #.*/ 0.mmon1 (mh.mmon12s/i++inet.com..3! -
see 40e(+5A&o3t PythonWin4 6o* 63*the* co+y*i,ht in6o*m.tion.
777
: seg'!a opI(o < 'sar o i!stalaor Pytho! Oo*icialP, istrib'"o pelos prHprios ese!volveores o
Pytho!% Esse i!stalaor poe ser bai8ao grat'itame!te, tem cHigo *o!te aberto e est sempre
at'ali)ao%
Procedure 1.!. %p&'o !( Instalando o Python do Python.org
1% 9ai8e o inst.(.1o* Win1ows 1o Python em http#$$333%pytho!%org$*tp$pytho!$2%3%2$%
2% E8ec'te o arL'ivo Python-2.3.2.exe%
3% 2iga as i!str'IJes !a tela%
A% 2e se' espaIo em isco *or limitao, < poss"vel eselecio!ar o arL'ivo E7M0Eelp, os scripts
Q8oo(s5R, e$o' o kit e testes Q9i&5test5R%
C% 2e voc= !(o tem ireitos ami!istrativos, poe selecio!ar :va!ce Optio!s %%% e selecio!ar ,o!6
:mi! 5!stall% : K!ica i*ere!Ia < a *orma como as e!traas e registro e os atalhos e me!'s s(o
criaos%
F% :pHs o t<rmi!o a i!stalaI(o, *eche o i!stalaor e abra 5!iciar6TProgramas6TPytho! 2%36T5/0E
QPytho! +-5R%
*+a"ple 1.!. ID,* -./I Python0
Python 2.3.2 (#4-, :ct 2 2003, 200200! "#$% v.1200 32 &it ('nte(!) on win32
8y+e ;co+y*i,ht;, ;c*e1its; o* ;(icense(!; 6o* mo*e in6o*m.tion.
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Pe*son.( 6i*ew.(( so6tw.*e m.y w.*n .&o3t the connection '=9>
m./es to its s3&+*ocess 3sin, this com+3te*4s inte*n.( (oo+&.c/
inte*6.ce. 8his connection is not visi&(e on .ny exte*n.(
inte*6.ce .n1 no 1.t. is sent to o* *eceive1 6*om the 'nte*net.
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

'=9> 1.0
777
1.1. Python no Mac %2 3
,o Mac O2 @, voc= tem 'as opIJes# i!stalar o' !(o i!stalar% 1oc= provavelme!te L'er i!stalar%
O Mac O2 @ 10%2 o' posterior vem com 'ma vers(o li!ha e coma!o o Pytho! pr<6i!stalaa% 2e
voc= 'sa co!*ortavelme!te a li!ha e coma!o, poe 'sar essa vers(o 'ra!te o primeiro terIo esse
livro% : vers(o pr<6i!stalaa !(o vem com 'm parser @M0, e!t(o L'a!o chegar ao cap"t'lo sobre
@M0 ser !ecessrio i!stalar a vers(o completa%
Procedure 1.1. *+ecutando a vers'o pr4instalada do Python no Mac %2 3
1% :bra a pasta 5A++(ic.tions%
2% :bra a pasta ?ti(ities%
3% /= 'm cliL'e 'plo !o 8e*min.( para abrir 'ma &a!ela e termi!al e chegar N li!ha e coma!o%
A% /igite python !a li!ha e coma!o%
*+a"ple 1.1. /sando a vers'o pr4instalada de Python no Mac %2 3
We(come to =.*win@
"(oc.(hostA) yo3B +ython
Python 2.2 (#1, 07514502, 232C0-!
"D%% A++(e c++-+*ecom+ 6.14) on 1.*win
8y+e ;he(+;, ;co+y*i,ht;, ;c*e1its;, o* ;(icense; 6o* mo*e in6o*m.tion.
777 ".+e*te %t*(E= +.*. vo(t.* .o +*om+t 1e com.n1o)
"(oc.(hostA) yo3B
5sso *'!cio!a, mas provavelme!te voc= vai pre*erir i!stalar a Kltima vers(o, L'e tamb<m vem com 'm
i!terpretaor gr*ico i!terativo%
Procedure 1.5. Instalando no Mac %2 3
1% 9ai8e a imagem e isco #.cPython-:$F em
http#$$homepages%c3i%!l$U&ack$macpytho!$o3!loa%html%
2% 2e o bro3ser !(o o *i)er a'tomaticame!te, = 'm cliL'e 'plo !o arL'ivo #.cPython-:$F-
2.3-1.1m, para mo!tar a imagem e isco !o esktop%
3% /= 'm cliL'e 'plo !o i!stalaor, #.cPython-:$F.+/,%
A% O i!stalaor peir o !ome e 's'rio e a se!ha o ami!istraor%
C% 2iga as i!str'IJes !a tela%
F% :pHs a i!stalaI(o, *eche o i!stalaor e abra a pasta 5A++(ic.tions%
G% :bra a pasta #.cPython-2.3
8% /= 'm cliL'e 'plo em Python'=> para e8ec'tar o Pytho!%
O 5/E MacPytho! eve mostrar 'ma tela e abert'ra e abrir 'm i!terpretaor i!terativo% Caso o
i!terpretaor !(o apareIa, selecio!e ?i!o36TPytho! 5!teractive QC"d46R%
*+a"ple 1.5. % ID* MacPython no Mac %2 3
Python 2.3 (#2, G3( 30 2003, 114C28!
"D%% 3.1 20020420 (+*e*e(e.se!)
8y+e ;co+y*i,ht;, ;c*e1its; o* ;(icense; 6o* mo*e in6o*m.tion.
#.cPython '=> 1.0.1
777
,ote L'e mesmo i!stala!o a vers(o mais !ova, a vers(o pr<6i!stalaa co!ti!'a prese!te% 2e estiver
roa!o scripts a partir a li!ha e coma!o, voc= precisa tomar c'iao com L'e vers(o e Pytho!
est 'sa!o%
*+a"ple 1.7. Duas vers8es de Python
"(oc.(hostA) yo3B +ython
Python 2.2 (#1, 07514502, 232C0-!
"D%% A++(e c++-+*ecom+ 6.14) on 1.*win
8y+e ;he(+;, ;co+y*i,ht;, ;c*e1its;, o* ;(icense; 6o* mo*e in6o*m.tion.
777 ".+e*te %t*(E= +.*. vo(t.* .o +*om+t 1e com.n1o)
"(oc.(hostA) yo3B 53s*5(oc.(5&in5+ython
Python 2.3 (#2, G3( 30 2003, 114C28!
"D%% 3.1 20020420 (+*e*e(e.se!) on 1.*win
8y+e ;he(+;, ;co+y*i,ht;, ;c*e1its;, o* ;(icense; 6o* mo*e in6o*m.tion.
777 ".+e*te %t*(E= +.*. vo(t.* .o +*om+t 1e com.n1o)
"(oc.(hostA) yo3B
1.5. Python no Mac %2 9
O Mac O2 B !(o vem com L'alL'er vers(o e Pytho!, mas a i!stalaI(o < simples e sH h 'ma opI(o%
Procedure 1.7. Instalando no Mac %2 9
1% 9ai8e o arL'ivo #.cPython2363((.&in em
http#$$homepages%c3i%!l$U&ack$macpytho!$o3!loa%html%
2% 2e se' bro3ser !(o abrir o arL'ivo a'tomaticame!te, = 'm cliL'e 'plo !o arL'ivo
#.cPython2363((.&in para escomprimir o arL'ivo com o 2t'**it E8pa!er%
3% /= 'm cliL'e 'plo !o i!stalaor, #.cPython2363((%
A% 2iga as i!str'IJes !a tela%
C% :pHs o t<rmi!o a i!stalaI(o, *eche o i!stalaor e abra a pasta 5A++(ic.tion%
F% :bra a pasta #.cPython-:$- 2.3%
G% /= 'm cliL'e 'plo em Python '=> para e8ec'tar o Pytho!%
O 5/E MacPytho! 5/E eve mostrar 'ma tela e abert'ra e 'm i!terpretaor i!terativo% Caso o shell
i!terativo !(o apareIa, selecio!e ?i!o36TPytho! 5!teractive QC"d46R%
*+a"ple 1.:. % ID* MacPython no Mac %2 9
Python 2.3 (#2, G3( 30 2003, 114C28!
"D%% 3.1 20020420 (+*e*e(e.se!)
8y+e ;co+y*i,ht;, ;c*e1its; o* ;(icense; 6o* mo*e in6o*m.tion.
#.cPython '=> 1.0.1
777
1.7. Python no ;ed<at ,inu+
: i!stalaI(o em sistemas operacio!ais compat"veis com -,5@ Qcomo o 0i!'8R < *cil se voc= 'sar 'm
pacote bi!rio% Pacotes bi!rios pr<6compilaos est(o ispo!"veis para as istrib'iIJes 0i!'8 mais
pop'lares, o' voc= poe compilar a partir o cHigo *o!te%
Para i!stalar !o DeEat 0i!'8, voc= eve bai8ar o DPM em
http#$$333%pytho!%org$*tp$pytho!$2%3%2$rpms$ e i!stalar 'sa!o o coma!o rp"%
*+a"ple 1.=. Instalando no ;ed<at ,inu+ 9
(oc.(hostAH s3 -
P.sswo*1 "1i,ite s3. senh. 1e *oot)
"*oot2(oc.(host *oot)# w,et htt+55+ython.o*,56t+5+ython52.35*+ms5*e1h.t-
-5+ython2.3-2.3-C+y1oto*,.i386.*+m
Ieso(vin, +ython.o*,... 1one.
%onnectin, to +ython.o*,"1-4.10-.137.226)80... connecte1.
088P *eJ3est sent, .w.itin, *es+onse... 200 :K
9en,th 7,4-C,111 ".++(ic.tion5octet-st*e.m)
...
"*oot2(oc.(host *oot)# *+m -?vh +ython2.3-2.3-C+y1oto*,.i386.*+m
P*e+.*in,... ########################################### "100B)
1+ython2.3 ########################################### "100B)
"*oot2(oc.(host *oot)# +ython
Python 2.2.2 (#1, Le& 24 2003, 1-1311!
"D%% 3.2.2 20030222 (Ie1 0.t 9in3x 3.2.2-4!) on (in3x2
8y+e ;he(+;, ;co+y*i,ht;, ;c*e1its;, o* ;(icense; 6o* mo*e in6o*m.tion.
777 ".+e*te %t*(E= +.*. s.i*)
"*oot2(oc.(host *oot)# +ython2.3
Python 2.3 (#1, $e+ 12 2003, 10C3C6!
"D%% 3.2.2 20030222 (Ie1 0.t 9in3x 3.2.2-C!) on (in3x2
8y+e ;he(+;, ;co+y*i,ht;, ;c*e1its;, o* ;(icense; 6o* mo*e in6o*m.tion.
777 ".+e*te %t*(E= +.*. s.i*)
"*oot2(oc.(host *oot)# which +ython2.3
53s*5&in5+ython2.3
OpsM :pe!as igita!o python e8ec'tamos a vers(o velha o Pytho!, L'e veio i!stalaa por
par(o% ,(o < isso L'e L'eremos%
: vers(o !ova se chama python2.3% 1oc= provavelme!te eve m'ar o cami!ho !a primeira
li!ha os scripts e e8emplo para L'e apo!te para a vers(o mais !ova%
Este < o cami!ho completo a vers(o mais !ova o Pytho! L'e acabamos e i!stalar% -se isso !a
li!ha L'e comeIa com #@ !o comeIo e se's scripts para gara!tir L'e os scripts ser(o e8ec'taos
com a vers(o mais rece!te o Pytho!, e lembre6se sempre e e8ec'tar python2.3 para e!trar !o
i!terpretaor i!terativo%
1.:. Python no Debian .>/?,inu+
2e voc= < sort'o o s'*icie!te para estar roa!o o /ebia! +,-$0i!'8, a i!stalaI(o < *eita com o
coma!o apt%
*+a"ple 1.@. Instalando no Debian .>/?,inu+
(oc.(hostAH s3 -
P.sswo*1 "1i,ite s3. senh. 1e *oot)
(oc.(hostA# .+t-,et inst.(( +ython
Ie.1in, P.c/.,e 9ists... =one
M3i(1in, =e+en1ency 8*ee... =one
8he 6o((owin, ext*. +.c/.,es wi(( &e inst.((e1
+ython2.3
$3,,este1 +.c/.,es
+ython-t/ +ython2.3-1oc
8he 6o((owin, N>W +.c/.,es wi(( &e inst.((e1
+ython +ython2.3
0 3+,*.1e1, 2 new(y inst.((e1, 0 to *emove .n1 3 not 3+,*.1e1.
Nee1 to ,et 0M52880/M o6 .*chives.
A6te* 3n+.c/in, -3C1/M o6 .11ition.( 1is/ s+.ce wi(( &e 3se1.
=o yo3 w.nt to contin3eN "O5n) O
$e(ectin, +*evio3s(y 1ese(ecte1 +.c/.,e +ython2.3.
(Ie.1in, 1.t.&.se ... 22848 6i(es .n1 1i*ecto*ies c3**ent(y inst.((e1.!
?n+.c/in, +ython2.3 (6*om ...5+ython2.3P2.3.1-1Pi386.1e&! ...
$e(ectin, +*evio3s(y 1ese(ecte1 +.c/.,e +ython.
?n+.c/in, +ython (6*om ...5+ythonP2.3.1-1P.((.1e&! ...
$ettin, 3+ +ython (2.3.1-1! ...
$ettin, 3+ +ython2.3 (2.3.1-1! ...
%om+i(in, +ython mo13(es in 53s*5(i&5+ython2.3 ...
%om+i(in, o+timiQe1 +ython mo13(es in 53s*5(i&5+ython2.3 ...
(oc.(hostA# exit
(o,o3t
(oc.(hostAH +ython
Python 2.3.1 (#2, $e+ 24 2003, 113-14!
"D%% 3.3.2 20030-08 (=e&i.n +*e*e(e.se!) on (in3x2
8y+e ;he(+;, ;co+y*i,ht;, ;c*e1its; o* ;(icense; 6o* mo*e in6o*m.tion.
777 ".+e*te %t*(E= +.*. s.i*)
1.=. Instalando a partir do cAdigo fonte
Caso voc= pre*ira compilar se' Pytho!, bai8e o cHigo *o!te em
http#$$333%pytho!%org$*tp$pytho!$2%3%2$ e *aIa o rit'al e configure, make, make install%
*+a"ple 1.9. Instalando a partir do cAdigo fonte
(oc.(hostAH s3 -
P.sswo*1 "1i,ite s3. senh. 1e *oot)
(oc.(hostA# w,et htt+55www.+ython.o*,56t+5+ython52.35Python-2.3.t,Q
Ieso(vin, www.+ython.o*,... 1one.
%onnectin, to www.+ython.o*,"1-4.10-.137.226)80... connecte1.
088P *eJ3est sent, .w.itin, *es+onse... 200 :K
9en,th 8,436,880 ".++(ic.tion5x-t.*)
...
(oc.(hostA# t.* x6Q Python-2.3.t,Q
(oc.(hostA# c1 Python-2.3
(oc.(hostA5Python-2.3# .5con6i,3*e
chec/in, #A%0=>P... (in3x2
chec/in, >F8IAP9A8='I...
chec/in, 6o* --witho3t-,cc... no
...
(oc.(hostA5Python-2.3# m./e
,cc -+th*e.1 -c -6no-st*ict-.(i.sin, -=N=>M?D -, -:3 -W.(( -Wst*ict-+*ototy+es
-'. -'.5'nc(31e -=PyPM?'9=P%:I> -o #o13(es5+ython.o #o13(es5+ython.c
,cc -+th*e.1 -c -6no-st*ict-.(i.sin, -=N=>M?D -, -:3 -W.(( -Wst*ict-+*ototy+es
-'. -'.5'nc(31e -=PyPM?'9=P%:I> -o P.*se*5.cce(e*.o P.*se*5.cce(e*.c
,cc -+th*e.1 -c -6no-st*ict-.(i.sin, -=N=>M?D -, -:3 -W.(( -Wst*ict-+*ototy+es
-'. -'.5'nc(31e -=PyPM?'9=P%:I> -o P.*se*5,*.mm.*1.o P.*se*5,*.mm.*1.c
...
(oc.(hostA5Python-2.3# m./e inst.((
53s*5&in5inst.(( -c +ython 53s*5(oc.(5&in5+ython2.3
...
(oc.(hostA5Python-2.3# exit
(o,o3t
(oc.(hostAH which +ython
53s*5(oc.(5&in5+ython
(oc.(hostAH +ython
Python 2.3.1 (#2, $e+ 24 2003, 113-14!
"D%% 3.3.2 20030-08 (=e&i.n +*e*e(e.se!) on (in3x2
8y+e ;he(+;, ;co+y*i,ht;, ;c*e1its; o* ;(icense; 6o* mo*e in6o*m.tion.
777 ".+e*te %t*(E= +.*. vo(t.* .o +*om+t 1e com.n1o)
(oc.(hostAH
1.@. % interpretador interativo
:gora L'e temos o Pytho! i!stalao, o L'e < esse tal e i!terpretaor i!terativo>
.'!cio!a assim# o Pytho! tem via 'pla% Ele poe ser 'sao como 'm i!terpretaor e scripts L'e
voc= poe e8ec'tar li!ha e coma!o o' a!o 'm 'plo cliL'e !eles como se *ossem aplicaIJes% E
tamb<m < poss"vel 's6lo como 'm i!terpretaor i!terativo para avaliar e8pressJes e coma!os% 5sso <
Ktil para ep'rar, ese!volver rapiame!te e e8ec'tar testes% E at< pessoas L'e 'sam o i!terpretaor
i!terativo como 'ma calc'laoraM
:bra o i!terpretaor i!terativo o Pytho! a ma!eira como *or !ecessrio em s'a plata*orma, e vamos
merg'lhar%
*+a"ple 1.16. Pri"eiros passos no interpretador interativo
777 1 E 1
2
777 +*int 4he((o wo*(14
he((o wo*(1
777 x R 1
777 y R 2
777 x E y
3
O i!terpretaor i!terativo o Pytho! poe avaliar e8pressJes Pytho! arbitrrias, i!cl'sive
e8pressJes aritm<ticas bsicas%
O i!terpretaor i!terativo poe e8ec'tar coma!os Pytho! arbitrrios, i!cl'sive o coma!o print%
1oc= poe atrib'ir valores a variveis, e os valores ser(o lembraos por L'a!to tempo o
i!terpretaor este&a aberto Qe !aa al<m issoR%
1.9. ;esu"o
1oc= eve agora ter 'ma vers(o e Pytho! L'e *'!cio!a%
/epe!e!o e s'a plata*orma, voc= poe ter mais e 'ma% Caso se&a se' caso, < !ecessrio tomar
c'iao com os cami!hos os i!terpretaores% Caso a simples e8ec'I(o o coma!o python !(o abra
a vers(o o Pytho! L'e voc= L'eira 'sar, poe ser !ecessrio igitar o cami!ho completo para a
vers(o completa%
.ora isso, parab<!s, e bem6vi!o ao Pytho!%
Chapter !. Conhecendo o Python
2%1% Merg'lha!o
2%2% /eclara!o *'!IJes
2%3% /oc'me!ta!o *'!IJes
2%A% 7'o < ob&eto
2%C% 5!e!ta!o cHigo
2%F% 7esta!o mH'los
2%G% :prese!ta!o icio!rios
2%8% :prese!ta!o listas
2%B% :prese!ta!o t'plas
2%10% /eclara!o variveis
2%11% :trib'i!o mKltiplos valores e 'ma ve)
2%12% .ormata!o stri!gs
2%13% Mapea!o listas
2%1A% -!i!o listas e separa!o stri!gs
2%1C% Des'mo
!.1. Mergulhando
:L'i temos 'm programa Pytho! completo%
Provavelme!te ele !(o *a) o me!or se!tio para voc=% ,(o se preoc'pe ai!a% 1amos ape!as a!alis6
lo, li!ha a li!ha% Mas leia o programa e ve&a se co!seg'e e!te!er algo%
*+a"ple !.1. odbchelper.py
5* yo' have !ot alreay o!e so, yo' ca! o3!loa this a! other e8amples 'se i! this book%
1e6 &3i(1%onnection$t*in,(+.*.ms!
;;;M3i(1 . connection st*in, 6*om . 1iction.*y o6 +.*.mete*s.
Iet3*ns st*in,.;;;
*et3*n ;S;.Toin(";BsRBs; B (/, v! 6o* /, v in +.*.ms.items(!)!
i6 PPn.mePP RR ;PPm.inPP;
myP.*.ms R U;se*ve*;;m+i(,*im;, V
;1.t.&.se;;m.ste*;, V
;3i1;;s.;, V
;+w1;;sec*et; V
W
+*int &3i(1%onnection$t*in,(myP.*.ms!
:gora roe esse programa e ve&a o L'e aco!tece%
,o :ctivePytho! em ?i!o3s, o mH'lo poe ser e8ec'tao com .ile6TD'!%%% QCtrl4;R% :
sa"a < e8ibia !a &a!ela i!terativa%
,o 5/E o Mac O2 @, o mH'lo poe ser e8ec'tao em Pytho!6TD'! 3i!o3%%% QC"d4;R, mas
h 'ma opI(o importa!te L'e voc= eve veri*icar a!tes% :bra o mH'lo !o 5/E, abra o me!' e
opIJes o mH'lo clica!o !o triV!g'lo preto !o ca!to s'perior ireito a &a!ela, e veri*iL'e L'e
a opI(o OD'! as WWmai!WWP este&a marcaa% Essa co!*ig'raI(o < g'araa com o mH'lo,
porta!to sH precisa ser *eita 'ma ve) por mH'lo%
Em sistemas compat"veis com -,5@ Qi!cl'i!o Mac O2 @R, < possivel e8ec'tar 'm mH'lo a
li!ha e coma!o# python odbchelper.py
*+a"ple !.!. 2aBda de odbchelper.py
se*ve*Rm+i(,*imS3i1Rs.S1.t.&.seRm.ste*S+w1Rsec*et
!.!. Declarando fun&8es
O Pytho! tem *'!IJes como a maioria as li!g'age!s, mas !(o tem arL'ivos e cabeIalho separaos
como CXX o' seIJes inte*6.ce e im+(ement.tion como Pascal% ;'a!o precisar e 'ma
*'!I(o, ape!as eclare e saia programa!o%
*+a"ple !.1. Declarando a fun&'o buildConnectionString
1e6 &3i(1%onnection$t*in,(+.*.ms!
1rias coisas evem ser !otaas% Em primeiro l'gar, a palavra6chave 1e6 i!icia 'ma eclaraI(o e
*'!I(o, seg'ia pelo se' !ome, seg'io pelos arg'me!tos e!tre par=!teses% MKltiplos arg'me!tos
Q!(o < o caso aL'iR poem ser separaos por v"rg'las%
: *'!I(o !(o e*i!e 'm tipo e ao e retor!o% .'!IJes Pytho! !(o especi*icam o tipo e se' valor
e retor!o4 !em seL'er se especi*ica se e *ato e8iste 'm valor e retor!o% Caso a *'!I(o e8ec'te 'm
coma!o *et3*n, retor!ar 'm valor, e caso co!trrio retor!ar None, o valor !'lo par(o o
Pytho!%
Em 1is'al 9asic, *'!IJes QL'e retor!am valorR comeIam com 63nction, e s'broti!as QL'e
!(o retor!am 'm valorR comeIam com s3&% ,(o h s'broti!as em Pytho!, ape!as *'!IJes%
7oas as *'!IJes retor!am 'm valor Qmesmo L'e se&a NoneR, e toas as *'!IJes s(o eclaras
com 1e6%
O arg'me!to, +.*.ms, !(o especi*ica 'm tipo e ao% Em Pytho!, variveis !'!ca s(o
e8plicitame!te tipaas% Pytho! escobre L'al o tipo a varivel e toma co!ta isso i!ter!ame!te%
Em Yava, CXX e o'tras li!g'age!s e tipagem esttica < !ecessrio especi*icar o tipo o valor e
retor!o e e caa arg'me!to e *'!I(o% Em Pytho!, o tipo e aos !'!ca < e8plicitame!te
eclarao% O Pytho! toma co!ta o tipo i!ter!ame!te baseao !o valor L'e voc= atrib'ir%
)dendo. -m leitor er'ito e!vio' essa e8plicaI(o e como Pytho! se compara com o'tras
li!g'age!s#
li!g'age!s estaticame!te tipaas
0i!g'age!s em L'e os tipos s(o e*i!ios em tempo e compilaI(o% : maior parte as
li!g'age!s estaticame!te tipaas *orIa isso obriga!o L'e toas as variveis se&am eclaraas
com tipos e*i!ios a!tes L'e possam ser 'saas% Yava e C s(o li!g'age!s estaticame!te tipaas%
li!g'age!s i!amicame!te tipaas
0i!g'age!s em L'e os tipos s(o escobertos em tempo e e8ec'I(o4 o oposto as li!g'age!s
estaticame!te tipaas% 192cript e Pytho! s(o i!amicame!te tipaas, porL'e escobrem o tipo
a varivel L'a!o voc= atrib'i 'm valor N mesma%
li!g'age!s *orteme!te tipaas
0i!g'age!s em L'e os tipos s(o sempre estritame!te seg'ios% Yava e Pytho! s(o *orteme!te
tipaas% 2e voc= tem 'm i!teiro, !(o poe tratar como se *osse 'ma stri!g sem co!vers(o
e8pl"cita Qmais sobre esse ass'!to mais aia!te !esse cap"t'loR%
li!g'age!s *racame!te tipaas
0i!g'age!s em L'e o tipo < ig!orao4 o oposto as li!g'age!s *orteme!te tipaas% 192cript <
*racame!te tipao% Em 192cript, < possivel co!cate!ar a stri!g 4124 como o i!teiro 3 e ter
como res'ltao a stri!g 41234, L'e tamb<m poe ser 'saa como se *osse o i!teiro 123, t'o
isso sem co!vers(o e8pl"cita%
Porta!to Pytho! < ta!to dinamicamente tipada QporL'e !(o reL'er eclaraIJes e tipoR e fortemente
tipada QporL'e a partir o mome!to em L'e a varivel tem tipo, esse tipo *a) i*ere!IaR%
!.1. Docu"entando fun&8es
Z possivel oc'me!tar 'ma *'!I(o o Pytho! 'sa!o 'ma 1oc st*in,%
*+a"ple !.5. Definindo a doc string de buildConnectionString
1e6 &3i(1%onnection$t*in,(+.*.ms!
;;;M3i(1 . connection st*in, 6*om . 1iction.*y o6 +.*.mete*s.
Iet3*ns st*in,.;;;
7r=s aspas 'plas limitam 'ma stri!g m'lti6li!has% 7'o e!tre os aspas i!iciais e *i!ais *a) parte a
stri!g, i!cl'sive L'ebras e li!ha e o'tros tipos e aspas% Z poss"vel 'sar stri!gs m'lti6li!has em
L'alL'er l'gar, mas a maior parte as ve)es ser !a e*i!iI(o e 'ma 1oc st*in,%
:spas triplas s(o 'ma ma!eira Ktil e e*i!ir 'ma stri!g com aspas simples e 'plas, como
JJ5...5 em Perl%
7'o e!tre as triplas aspas < a 1oc st*in, a *'!I(o, a oc'me!taI(o o L'e a *'!I(o *a)% -ma
1oc st*in,, caso e8ista, eve ser a primeira coisa e*i!ia em 'ma *'!I(o Qi.e. a primeira coisa
epois o ois6po!tosR% ,(o < tec!icame!te obrigatHrio 'sar 'ma 1oc st*in,, mas < 'ma boa
i<ia% E' sei L'e voc= eve ter o'vio isso toas as a'las e programaI(o L'e voc= & teve, mas
Pytho! tem 'm i!ce!tivo a mais# a 1oc st*in, est ispo!"vel em tempo e e8ec'I(o como 'm
atrib'to a *'!I(o%
M'itos 5/Es Pytho! 'sam a 1oc st*in, para prover oc'me!taI(o se!s"vel ao co!te8to, e
*orma L'e L'a!o voc= igita o !ome a *'!I(o a 1oc st*in, aparece como 'ma ica
*l't'a!te% 5sso < m'ito Ktil, mas < ape!as t(o bom L'a!to as 1oc st*in,s L'e voc= escreve%
,eitura reco"endada
PEP 2CG e*i!e co!ve!IJes e 1oc st*in,%
Python Style Guide isc'te como escrever 'ma boa 1oc st*in,%
Python Tutorial isc'te co!ve!IJes e espaIame!to em 1oc st*in, s %
!.5. Tudo obCeto
Caso voc= !(o te!ha prestao ate!I(o, e' isse L'e *'!IJes Pytho! t=m atrib'tos, e L'e estes
atrib'tos est(o ispo!"veis em tempo e e8ec'I(o%
-ma *'!I(o, como t'o em Pytho!, < ob&eto%
*+a"ple !.7. )cessando a doc string da fun&'o buildConnectionString
777 im+o*t o1&che(+e*
777 +.*.ms R U;se*ve*;;m+i(,*im;, ;1.t.&.se;;m.ste*;, ;3i1;;s.;,
;+w1;;sec*et;W
777 +*int o1&che(+e*.&3i(1%onnection$t*in,(+.*.ms!
se*ve*Rm+i(,*imS3i1Rs.S1.t.&.seRm.ste*S+w1Rsec*et
777 +*int o1&che(+e*.&3i(1%onnection$t*in,.PP1ocPP
M3i(1 . connection st*in, 6*om . 1iction.*y
Iet3*ns st*in,.
: primeira li!ha importa o programa o1&che(+e* como 'm mH'lo% -ma ve) L'e se importe o
mH'lo, < possivel *a)er re*er=!cia a L'alL'er as *'!IJes, classes o' atrib'tos pKblicos% MH'los
poem poem *a)er isso para *a)er 'so e rec'rsos e o'tros mH'los, e voc= poe *a)er isso !o
5/E tamb<m% Esse co!ceito < importa!te, e retor!aremos a ele mais tare%
;'a!o voc= L'iser 'sar *'!IJes e*i!ias em mH'los importaos, eve i!cl'ir o !ome o
mH'lo% 1oc= !(o poe i)er ape!as &3i(1%onnection$t*in,, < obrigatHrio 'sar
o1&che(+e*.&3i(1%onnection$t*in,% 5sto < parecio com classes em Yava%
:o i!v<s e chamar a *'!I(o como poeria ser esperao, peimos 'm os atrib'tos a *'!I(o,
chamao PP1ocPP%
im+o*t em Pytho! < como *eJ3i*e em Perl% -ma ve) L'e voc= im+o*t 'm mH'lo
Pytho!, poe acessar se' co!teKo com mdulo.funo assim como em Perl voc= importa
com *eJ3i*e e acessa com mdulofuno%
:!tes e prosseg'ir, L'ero me!cio!ar breveme!te o cami!ho e b'sca e bibliotecas% O Pytho!
proc'ra em iversos l'gares o mH'lo a ser importao% Mais especi*icame!te, ele proc'ra em toos os
iretHrios e*i!ios em sys.+.th% O co!teKo essa varivel < 'ma lista, e voc= poe *acilme!te
vis'ali)ar o' moi*icar se' co!teKo com os m<toos e ma!ip'laI(o e lista, L'e veremos mais
tare !esse cap"t'lo%
*+a"ple !.:. Ca"inhos de busca de "Adulos
777 im+o*t sys
777 sys.+.th
"44, 453s*5(oc.(5(i&5+ython2.24, 453s*5(oc.(5(i&5+ython2.25+(.t-(in3x24,
453s*5(oc.(5(i&5+ython2.25(i&-1yn(o.14, 453s*5(oc.(5(i&5+ython2.25site-+.c/.,es4,
453s*5(oc.(5(i&5+ython2.25site-+.c/.,es5P'94, 453s*5(oc.(5(i&5+ython2.25site-
+.c/.,es5+i11(e4)
777 sys
Xmo13(e 4sys4 (&3i(t-in!7
777 sys.+.th..++en1(45me35novo51i*etY*io4!
5mportar o mH'lo sys *a) toas as s'as *'!IJes e atrib'tos *icarem ispo!"veis para 'so%
sys.+.th < 'ma lista e !omes e iretHrio L'e e*i!e o cami!ho e b'sca at'al% QO se'
sys.+.th vai ser i*ere!te, epe!e!o o sistema operacio!al, a vers(o e Pytho! e e o!e
*oi i!stalao%R O Pytho! proc'ra em toos esses iretHrios, !a orem, por arL'ivos .+y com o
mesmo !ome L'e o mH'lo L'e voc= est te!ta!o importar%
,a verae, e' me!ti# a verae < 'm po'co mais complicaa% ,em toos os mH'los s(o
arL'ivos .+y% :lg'!s, como o prHprio mH'lo sys, s(o mH'los Semb'tiosS QSb'ilt6i!SR# eles
*a)em parte o prHprio Pytho!% MH'los emb'tios *'!cio!am como mH'los !ormais, mas o
cHigo Pytho! eles !(o est ispo!"vel, porL'e !(o *oram escritos em Pytho! Qo mH'lo sys <
escrito em CR%
1oc= poe aicio!ar 'm !ovo iretHrio ao cami!ho e proc'ra em tempo e e8ec'I(o aicio!a!o
o !ome o iretHrio ao sys.+.th% O Pytho! a'tomaticame!te *ar a proc'ra !o !ovo iretHrio
L'a!o voc= importar 'm mH'lo% O e*eito 'ra por ta!to tempo L'a!to o Pytho! este&a
proc'ra!o% Q.alaremos sobre o .++en1 e o'tros m<toos e lista mais tare !esse cap"t'lo%R
7'o em Pytho! < ob&eto, e L'ase t'o tem atrib'tos e m<toos%
[1\
7oas as *'!IJes t=m 'm atrib'to
i!ter!o PP1ocPP, L'e retor!a a 1oc st*in, e*i!ia !o cHigo *o!te a *'!I(o% O mH'lo sys <
'm ob&eto L'e Qe!tre o'tras coisasR 'm atrib'to chamao +.th, e assim por ia!te%
5sto < t(o importa!te L'e vo' repetir mais 'ma ve) caso voc= !(o te!ha e!te!io ai!a# tudo em
Python o!"eto% 2tri!gs s(o ob&etos% 0istas s(o ob&etos% .'!IJes s(o ob&etos% :t< mH'los s(o ob&etos%
,eitura reco"endada
Python #eference $anual e8plica e8atame!te o L'e sig!i*ica i)er L'e t'o em Pytho! <
ob&eto porL'e alg'mas pessoas s(o pea!tes e aoram isc'tos e8te!sivame!te esse tipo e
coisa%
e**6bot s'mari)a ob&etos Pytho!%
Dootnotes
[1\
/i*ere!tes li!g'age!s e*i!em Oob&etoP e i*ere!tes *ormas% Em alg'mas, sig!i*ica L'e todos os
ob&etos precisam ter atrib'tos e m<toos% Em o'tras, sig!i*ica L'e toos os ob&etos s(o herveis
.5@ME% Em Pytho! a e*i!iI(o < mais rela8aa# alg'!s ob&etos !(o t=m atrib'tos !em m<toos Qmais
sobre isso !esse cap"t'loR, e !em toos os ob&etos s(o herveis Qmais sobre isso !o cap"t'lo 3R% Mas
t'o < 'm ob&eto !o se!tio e L'e poe ser 'sao como valor e 'ma varivel o' passao como
arg'me!to para 'ma *'!I(o Qmais sobre isso !o cap"t'lo 2R%
!.7. Indentando
E!F
cAdigo
.'!IJes Pytho! !(o t=m marcaIJes e8pl"citas e comeIo e *im como &e,in e en1 o' chaves% O
K!ico elimitaor < o si!al e ois6po!tos QOPR e a prHpria i!e!taI(o o cHigo%
*+a"ple !.=. Indentando a fun&'o buildConnectionString
1e6 &3i(1%onnection$t*in,(+.*.ms!
;;;M3i(1 . connection st*in, 6*om . 1iction.*y o6 +.*.mete*s.
Iet3*ns st*in,.;;;
*et3*n ;S;.Toin(";BsRBs; B (/, v! 6o* /, v in +.*.ms.items(!)!
9locos e cHigo Q*'!IJes, coma!os i6, laIos 6o*, etc%R s(o e*i!ios pelo 'so e i!e!taI(o%
5!e!tar o cHigo i!icia 'm bloco, remover a i!e!taI(o termi!a% ,(o h si!ais espec"*icos o'
palavras6chave% 5sso sig!i*ica L'e espaIo em bra!co < sig!i*icativo e eve ser co!siste!te% ,esse
e8emplo, o cHigo a *'!I(o Qi!cl'i!o a 1oc st*in,R est i!e!tao com A espaIos% ,(o <
!ecessrio L'e se&a A, ape!as L'e se&a co!siste!te% : primeira li!ha !(o i!e!taa apHs isso est *ora
a *'!I(o%
:pHs alg'!s protestos i!iciais e vrias a!alogias c"!icas com .ortra!, voc= *ar as pa)es com esse
rec'rso e comeIar a ver os be!e*"cios% -m gra!e be!e*"cio < L'e toos os programas Pytho! s(o
parecios, 'ma ve) L'e i!e!taI(o < 'm reL'erime!to a li!g'agem e !(o 'ma L'est(o e estilo% 5sso
tor!a mais *cil a leit'ra e cHigo escrito por terceiros%
Pytho! 'sa L'ebras e li!ha para separar coma!os e ois6po!tos e i!e!taI(o para separar
cHigos e bloco% CXX e Yava 'sam po!to6e6v"rg'la para separar coma!os e chaves para separar
blocos e cHigo%
,eitura reco"endada
Python #eference $anual isc'te L'estJes e i!e!taI(o e!tre plata*ormas i*ere!tes e
mostra vrios erros e i!e!taI(o%
Python Style Guide isc'te estilo e i!e!taI(o%
Dootnotes
[2\
5sso < 'm a!glicismo mas os programaores *alam assim Q,% o 7%R
!.:. Testando "Adulos
MH'los Pytho! s(o ob&etos e t=m iversos atrib'tos Kteis% 1oc= poe 'sar isso para testar se's
mH'los *acilme!te N meia L'e os escreve%
*+a"ple !.@. % truGue do if __name__
i6 PPn.mePP RR ;PPm.inPP;
Primeiro alg'mas observaIJes a!tes e atacar o !Kcleo a L'est(o% Em primeiro l'gar, par=!teses !(o
s(o obrigatHrios em tor!o a e8press(o i6% :l<m isso, o coma!o i6 termi!a com ois6po!tos, e <
seg'io por cHigo i!e!tao%
Como C, Pytho! 'sa RR para comparaI(o e R para atrib'iI(o% :o co!trrio e C, Pytho! !(o
aceita atrib'iI(o em6li!ha, o L'e tor!a imposs"vel *a)er 'ma atrib'iI(o e valor L'a!o voc=
L'eria *a)er 'ma comparaI(o%
E!t(o por L'e esse i6 em partic'lar < 'm tr'L'e> MH'los s(o ob&etos, e toos os mH'los t=m 'm
atrib'to i!ter!o chamao PPn.mePP% O valor esse atrib'to epe!e a *orma como voc= est
'sa!o o mH'lo% 2e voc= 'sar im+o*t, o PPn.mePP ser o !ome e arL'ivo o mH'lo, sem o
cami!ho e sem a e8te!s(o% Mas tamb<m < poss"vel e8ec'tar 'm mH'lo iretame!te como 'm
programa i!terativo% ,esse caso, PPn.mePP ter o valor especial PPm.inPP%
*+a"ple !.9. % __name__ de u" "Adulo i"portado
777 im+o*t o1&che(+e*
777 o1&che(+e*.PPn.mePP
4o1&che(+e*4
2abe!o isso, voc= poe criar 'm co!&'!to e testes para se' mH'lo e!tro o prHprio mH'lo,
protegio por esse i6% ;'a!o voc= e8ec'tar o mH'lo iretame!te, PPn.mePP ser PPm.inPP, e
os testes ser(o e8ec'taos% ;'a!o importar o mH'lo, PPn.mePP ser alg'ma o'tra coisa e os
testes ser(o ig!oraos% Com isso < mais *cil ese!volver e ep'rar !ovos mH'los a!tes e i!tegr6
los a 'm programa maior%
,o MacPytho! h 'm passo aicio!al para *a)er o tr'L'e o i6 PPn.mePP *'!cio!ar% :bra o
me!' e opIJes o mH'lo clica!o o triV!g'lo preto !o ca!to s'perior ireito a &a!ela, e
certi*iL'e6se e L'e D'! as WWmai!WW este&a selecio!ao%
,eitura reco"endada
Python #eference $anual isc'te os etalhes e bai8o !"vel a importaI(o e mH'los %
!.=. )presentando dicionHrios
-ma breve igress(o < !ecessria, porL'e voc= precisa apre!er sobre icio!rios, t'plas e listas
Qt'o issoMR% Caso voc= se&a 'm programaor Perl, poe ape!as ar 'ma olhaa !os icio!rios e
listas, mas eve prestar ate!I(o !as t'plas%
-m os tipos bsicos o Pytho! < o icio!rio, L'e e*i!e relaIJes 'm6para6'm e!tre chaves e
valores%
-m icio!rio em Pytho! < como 'm hash Qo' array associativoR em Perl% Em Perl, variveis L'e
arma)e!am hashes sempre i!iciam com 'm caracter B4 em Pytho!, variveis poem ter L'alL'er
!ome, e o tipo o ao < ma!tio i!ter!ame!te%
-m icio!rio em Pytho! < como 'ma i!stV!cia a classe 0.sht.&(e em Yava%
-m icio!rio em Pytho! < como a i!stV!cia e 'm ob&eto $c*i+tin,.=iction.*y em
1is'al 9asic%
*+a"ple !.16. Definindo u" dicionHrio
777 1 R U;se*ve*;;m+i(,*im;, ;1.t.&.se;;m.ste*;W
777 1
U4se*ve*4 4m+i(,*im4, 41.t.&.se4 4m.ste*4W
777 1";se*ve*;)
4m+i(,*im4
777 1";1.t.&.se;)
4m.ste*4
777 1";m+i(,*im;)
8*.ce&.c/ (inne*most (.st!
Li(e ;Xinte*.ctive in+3t7;, (ine 1, in N
Key>**o* m+i(,*im
Primeirame!te, criamos 'm icio!rio com ois eleme!tos e o atrib'"mos N varivel 1% Caa
eleme!to < 'm par chave6valor, e o co!&'!to os eleme!tos < limitao por chaves%
4se*ve*4 < 'ma chave, e se' valor associao, re*ere!ciao com 1";se*ve*;), <
4m+i(,*im4%
41.t.&.se4 < 'ma chave, e se' valor associao, re*ere!ciao com 1";1.t.&.se;), <
4m.ste*4%
Z poss"vel achar os valores a partir a chave, mas !(o as chaves a partir o valor% Porta!to 1
";se*ve*;) < 4m+i(,*im4, mas 1";m+i(,*im;) leva!ta 'ma e8ceI(o porL'e
4m+i(,*im4 !(o < 'ma chave%
*+a"ple !.11. Modificando u" dicionHrio
777 1
U4se*ve*4 4m+i(,*im4, 41.t.&.se4 4m.ste*4W
777 1";1.t.&.se;) R ;+3&s;
777 1
U4se*ve*4 4m+i(,*im4, 41.t.&.se4 4+3&s4W
777 1";3i1;) R ;s.;
777 1
U4se*ve*4 4m+i(,*im4, 43i14 4s.4, 41.t.&.se4 4+3&s4W
,(o < poss"vel ter chaves 'plicaas em 'm icio!rio% :trib'ir 'm valor a 'ma chave vai apagar
o valor a!tigo%
Z poss"vel aicio!ar pares chave6valor a L'alL'er mome!to% : si!ta8e < i=!tica N e moi*icaI(o
e valores e8iste!tes% Q2im, isso vai i!comoar voc= alg'm ia L'a!o voc= achar L'e est
aicio!a!o valores mas est !a verae ape!as moi*ica!o o mesmo valor porL'e 'ma chave
!(o est m'a!o a *orma como voc= espera%R
,ote L'e o !ovo eleme!to Qchave 43i14, valor 4s.4R parece estar !o meio% ,a metae, < ape!as
'ma coi!ci=!cia os eleme!tos terem aparecio em orem !o primeiro eleme!to4 aL'i < ape!as 'ma
coi!ci=!cia L'e pareIa estar *ora e orem%
/icio!rios !(o t=m o co!ceito e ore!ame!to e!tre os eleme!tos% Z i!correto i)er L'e os
eleme!tos est(o O*ora e oremP4 eles est(o simplesme!te esore!aos% Essa isti!I(o <
importa!te e vai i!comoar voc= L'a!o voc= L'iser acessar 'm icio!rio em 'ma orem
espec"*ica, repro')"vel Qcomo por orem al*ab<tica e chaveR% E ma!eiras e *a)er isso, mas
!(o e!tro o ob&eto e icio!rio%
*+a"ple !.1!. Misturando tipos e" u" dicionHrio
777 1
U4se*ve*4 4m+i(,*im4, 43i14 4s.4, 41.t.&.se4 4+3&s4W
777 1";*et*yco3nt;) R 3
777 1
U4se*ve*4 4m+i(,*im4, 43i14 4s.4, 41.t.&.se4 4m.ste*4, 4*et*yco3nt4 3W
777 1"42) R ;1o3,(.s;
777 1
U4se*ve*4 4m+i(,*im4, 43i14 4s.4, 41.t.&.se4 4m.ste*4, 42 41o3,(.s4,
4*et*yco3nt4 3W
/icio!rios !(o s(o ape!as para stri!gs% 1alores e icio!rios poem ter L'alL'er tipo, i!cl'sive
stri!gs, i!teiros, ob&etos e at< o'tros icio!rios% E e!tro e 'm icio!rio os valores !(o
precisam ser e 'm tipo '!i*orme% Z poss"vel 'sar os tipos L'e *orem !ecessrios, N vo!tae%
Chaves e icio!rios s(o mais restritivas, mas poem ser i!teiros, stri!gs e alg'!s o'tros tipos
Qmais sobre isso aia!teR% Os tipos e chaves tamb<m poem ser mist'raos%
*+a"ple !.11. ;e"ovendo itens de u" dicionHrio
777 1
U4se*ve*4 4m+i(,*im4, 43i14 4s.4, 41.t.&.se4 4m.ste*4, 42 41o3,(.s4,
4*et*yco3nt4 3W
777 1e( 1"42)
777 1
U4se*ve*4 4m+i(,*im4, 43i14 4s.4, 41.t.&.se4 4m.ste*4, 4*et*yco3nt4 3W
777 1.c(e.*(!
777 1
UW
1e( remove ite!s i!ivi'ais o icio!rio por chave%
c(e.* remove toos os ite!s e 'm icio!rio% ,ote L'e 'm par e chaves va)io sig!i*ica 'm
icio!rio sem ite!s%
*+a"ple !.15. 2trings s'o sensBveis a caso
777 1 R UW
777 1";/ey;) R ;v.(3e;
777 1";/ey;) R ;othe* v.(3e;
777 1
U4/ey4 4othe* v.(3e4W
777 1";Key;) R ;thi*1 v.(3e;
777 1
U4Key4 4thi*1 v.(3e4, 4/ey4 4othe* v.(3e4W
:trib'ir 'm valor a 'ma chave e8iste!te e icio!rio simplesme!te s'bstit'i o valor a!tigo com o
!ovo%
5sso !(o < atrib'ir 'm valor !ovo a 'ma chave e8iste!te porL'e stri!gs !o Pytho! s(o se!s"veis a
caso, e!t(o 4/ey4 !(o < o mesmo L'e 4Key4% 5sso cria 'm !ovo par e chave$valor !o
icio!rio% Poe ser parecio para voc=, mas para o Pytho! < algo totalme!te i*ere!te%
,eitura reco"endada
%o& to Thin' Li'e a (omputer Scientist e!si!a como 'sar icio!rios e como 'sar icio!rios
para moelar matri)es esparsas%
Pytho! ]!o3lege 9ase 7em m'itos e8emplos e 'so e icio!rios%
Pytho! Cookbook isc'te como ore!ar valores e 'm icio!rio por chave%
Python Li!rary #eference s'mari)a toos os m<toos e icio!rios%
!.@. )presentando listas
0istas s(o o tipo mais pro'tivo o Pytho!% 2e s'a K!ica e8peri=!cia com listas *or arrays
[3\
em
1is'al 9asic o' Qcoitao e voc=R o atastore em Po3erb'iler, prepare6se psicologicame!te para
apre!er sobre as listas o Pytho!%
-ma lista em Pytho! < como 'm array em Perl% Em Perl, variveis L'e arma)e!am arrays sempre comeIam com o caracter
variveis poem ter L'alL'er !ome, 'ma ve) L'e o Pytho! c'ia o tipo i!ter!ame!te%
-ma lista em Pytho! *a) m'ito mais L'e 'm array em Yava Qembora possa ser 'saa a mesma *orma se < t'o L'e voc= L'erR% -ma a!alogia
melhor seria com a classe Zecto*, L'e poe arma)e!ar ob&etos arbitrrios e crescer a'tomaticame!te N meia em L'e ite!s s(o aicio!aos%
*+a"ple !.17. Definindo u"a lista
777 (i R ";.;, ;&;, ;m+i(,*im;, ;Q;, ;ex.m+(e;)
777 (i
"4.4, 4&4, 4m+i(,*im4, 4Q4, 4ex.m+(e4)
777 (i"0)
4.4
777 (i"4)
4ex.m+(e4
Primeirame!te e*i!imos 'ma lista com C eleme!tos% ,ote L'e eles ma!t=m a orem origi!al% 5sso !(o < obra o acaso% -ma lista < 'm co!&'!to
ore!ao e eleme!tos colocaos e!tre colchetes%
-ma lista poe ser 'saa como 'm array com "!ice i!iciao em )ero% O primeiro eleme!to e 'ma lista !(o6va)ia < sempre
O Kltimo eleme!to essa lista e ci!co eleme!tos < (i"4), 'ma ve) L'e listas t=m "!ice comeIao em )ero%
*+a"ple !.1:. Indices negativos de listas
777 (i
"4.4, 4&4, 4m+i(,*im4, 4Q4, 4ex.m+(e4)
777 (i"-1)
4ex.m+(e4
777 (i"-3)
4m+i(,*im4
-m "!ice !egativo acessa eleme!tos a partir o *im a lista, co!ta!o para trs% O Kltimo eleme!to e 'ma lista !(o6va)ia < sempre
2e "!ices !egativos est(o cria!o co!*'s(o, pe!se essa *orma# (i"-n) RR (i"(en((i! - n)% Porta!to !essa lista,
- 3) RR (i"2)%
*+a"ple !.1=. Datiando u"a lista
777 (i
"4.4, 4&4, 4m+i(,*im4, 4Q4, 4ex.m+(e4)
777 (i"13)
"4&4, 4m+i(,*im4)
777 (i"1-1)
"4&4, 4m+i(,*im4, 4Q4)
777 (i"03)
"4.4, 4&4, 4m+i(,*im4)
:L'i tiramos 'm s'bco!&'!to a lista, chamao e O*atiaP, especi*ica!o ois "!ices% O valor e retor!o < 'ma !ova lista co!te!o toos os
eleme!tos a lista, em orem, a partir o primeiro "!ice a *atia Q!esse caso (i"1)R at< o seg'!o "!ice, e8cl'sive Q!esse caso
O *atiame!to tamb<m *'!cio!a se 'm o' ambos os "!ices *orem !egativos% 1oc= poe pe!sar a seg'i!te *orma# le!o a lista a esL'era para a
ireita, o primeiro "!ice especi*ica o primeiro eleme!to L'e voc= L'er, e o seg'!o "!ice especi*ica o primeiro eleme!to L'e voc= !(o L'er% O
valor e retor!o < t'o L'e estiver !o meio%
0istas s(o baseaas em )ero, porta!o (i"03) retor!a os tr=s primeiros eleme!tos a lista, i!icia!o em (i"0)
*+a"ple !.1@. )talho no fatia"ento
777 (i
"4.4, 4&4, 4m+i(,*im4, 4Q4, 4ex.m+(e4)
777 (i"3)
"4.4, 4&4, 4m+i(,*im4)
777 (i"3)
"4Q4, 4ex.m+(e4)
777 (i")
"4.4, 4&4, 4m+i(,*im4, 4Q4, 4ex.m+(e4)
2e o primeiro "!ice a *atia *or 0, < poss"vel ei8ar ele e *ora% (i"3) < o mesmo L'e (i"03) o e8emplo a!terior%
/e ma!eira semelha!te, se o seg'!o "!ice a *atia *or o Kltimo "tem a lista, < poss"vel ei8ar esse "!ice *ora% Porta!to
(i"3C) porL'e a lista tem C eleme!tos%
Perceba a simetria aL'i% ,essa lista e C eleme!tos, (i"3) retor!a os tr=s primeiros eleme!tos, e (i"3) retor!a os ois Kltimos% /e *ato,
"n) sempre retor!a n primeiros eleme!tos, e (i"n) sempre retor!a o resta!te, !(o importa o tama!ho a lista%
2e ambos os "!ices a *atia s(o ei8aos e *ora, toos os os eleme!tos a lista s(o i!cl'sos% Mas o res'ltao !(o < a mesma lista
sim 'ma o'tra lista L'e co!t<m toos os eleme!tos ig'ais% (i") < 'm atalho para *a)er 'ma cHpia completa e 'ma lista%
*+a"ple !.19. )dicionando ele"entos J lista
777 (i
"4.4, 4&4, 4m+i(,*im4, 4Q4, 4ex.m+(e4)
777 (i..++en1(;new;!
777 (i
"4.4, 4&4, 4m+i(,*im4, 4Q4, 4ex.m+(e4, 4new4)
777 (i.inse*t(2, ;new;!
777 (i
"4.4, 4&4, 4new4, 4m+i(,*im4, 4Q4, 4ex.m+(e4, 4new4)
777 (i.exten1(";two;, ;e(ements;)!
777 (i
"4.4, 4&4, 4new4, 4m+i(,*im4, 4Q4, 4ex.m+(e4, 4new4, 4two4, 4e(ements4)
.++en1 aicio!a 'm K!ico eleme!to ao *im a lista%
inse*t i!sere 'm eleme!to em 'ma lista% O arg'me!to !'m<rico < o "!ice o primeiro eleme!to a ser emp'rrao para *re!te e s'a posiI(o
at'al% ,ote L'e eleme!tos a lista !(o precisam ser K!icos4 h agora ois eleme!tos isti!tos com o valor 4new4
exten1 co!cate!a listas% ,ote L'e !(o se chama exten1 com mKltiplos arg'me!tos4 o K!ico arg'me!to < 'ma lista% ,esse caso, a lista tem ois
eleme!tos%
*+a"ple !.!6. Kuscando e" u"a lista
777 (i
"4.4, 4&4, 4new4, 4m+i(,*im4, 4Q4, 4ex.m+(e4, 4new4, 4two4, 4e(ements4)
777 (i.in1ex(;ex.m+(e;!
C
777 (i.in1ex(;new;!
2
777 (i.in1ex(;c;!
8*.ce&.c/ (inne*most (.st!
Li(e ;Xinte*.ctive in+3t7;, (ine 1, in N
Z.(3e>**o* (ist.in1ex(x! x not in (ist
777 ;c; in (i
0
in1ex e!co!tra a primeira ocorr=!cia e 'm valor !a lista e retor!a o "!ice%
in1ex e!co!tra a primeira ocorr=!cia e valor !a lista% ,esse caso, 4new4 ocorre 'as ve)es !a lista, em (i"2)
ape!as o primeiro "!ice, 2%
2e o valor !(o *or e!co!trao !a lista, o Pytho! leva!ta 'ma e8ceI(o% 5sso < i*ere!te a maioria as o'tras li!g'age!s, L'e retor!am alg'm "!ice
i!vlio% Embora possa parecer i!c^moo, isso < a Coisa Certa, pois sig!i*ica L'e se' programa vai ser i!terrompio !a origem o problema ao
i!v<s e mais tare L'a!o voc= te!tar 'sar o "!ice i!vlio%
Para testar se 'm valor est !a lista, 'se in, L'e retor!a 1 se o valor *or e!co!trao o' 0 caso co!trrio%
:!tes a vers(o 2%2%1, Pytho! !(o ti!ha 'm tipo e aos boolea!o% Para compe!sar essa *alta, Pytho! aceitava L'ase L'alL'er coisa em 'm
co!te8to boolea!o Qo co!icio!al e 'm coma!o i6 por e8emploR, e acoro com as seg'i!tes regras# 0 < *also, toos os emais !Kmeros s(o
veraeiros% -ma stri!g va)ia Q;;R < *alsa, toas as emais stri!gs s(o veraeiras% -ma lista va)ia Q")R < *alsa, toas as emais listas s(o
veraeiras% -ma t'pla va)ia Q(!R < *alsa, toas as o'tras t'plas s(o veraeiras% -m icio!rio va)io QUWR < *also, toos os emais icio!rios
s(o veraeiro% Essas regras ai!a *'!cio!am assim o Pytho! 2%2%1 em ia!te, mas agora tamb<m < poss"vel 'sar valores boolea!os e verae,
com os !omes e 8*3e e L.(se% ,ote L'e ambos os valores comeIam com maiKsc'las# Pytho! < se!s"vel a caso%
*+a"ple !.!1. ;e"ovendo ele"entos de u"a lista
777 (i
"4.4, 4&4, 4new4, 4m+i(,*im4, 4Q4, 4ex.m+(e4, 4new4, 4two4, 4e(ements4)
777 (i.*emove(;Q;!
777 (i
"4.4, 4&4, 4new4, 4m+i(,*im4, 4ex.m+(e4, 4new4, 4two4, 4e(ements4)
777 (i.*emove(;new;!
777 (i
"4.4, 4&4, 4m+i(,*im4, 4ex.m+(e4, 4new4, 4two4, 4e(ements4)
777 (i.*emove(;c;!
8*.ce&.c/ (inne*most (.st!
Li(e ;Xinte*.ctive in+3t7;, (ine 1, in N
Z.(3e>**o* (ist.*emove(x! x not in (ist
777 (i.+o+(!
4e(ements4
777 (i
"4.4, 4&4, 4m+i(,*im4, 4ex.m+(e4, 4new4, 4two4)
*emove remove a primeira ocorr=!cia e 'm valor em 'ma lista%
*emove remove apenas a primeira ocorr=!cia o valor% ,esse caso, 4new4 aparecia 'as ve)es !a lista, mas (i.*emove(;new;!
ape!as a primeira ocorr=!cia%
2e o valor !(o *or e!co!trao !a lista, o Pytho! leva!ta 'ma e8ceI(o% 5sso < sim<trico com o comportame!to o m<too
+o+ < 'ma coisa i!teressa!te% Ele *a) 'as coisas# remove o Kltimo eleme!to a lista e retor!a o valor% ,ote L'e isso < i*ere!te e
retor!a 'm valor mas !(o m'a a lista, e i*ere!te e (i.*emove(valor!, L'e m'a a lista mas !(o retor!a 'm valor%
*+a"ple !.!!. %peradores de lista
777 (i R "4.4, 4&4, 4m+i(,*im4)
777 (i R (i E "4ex.m+(e4, 4new4)
777 (i
"4.4, 4&4, 4m+i(,*im4, 4ex.m+(e4, 4new4)
777 (i ER "4two4)
777 (i
"4.4, 4&4, 4m+i(,*im4, 4ex.m+(e4, 4new4, 4two4)
777 (i R "1, 2) < 3
777 (i
"1, 2, 1, 2, 1, 2)
0istas poem ser co!cate!aas com o operaor E% lista R lista E outralista pro') o mesmo res'ltao L'e
(outralista!% Mas o operaor E retor!a 'ma !ova lista Qco!cate!aaR como valor, e!L'a!to exten1 ape!as altera 'ma lista pr<6e8iste!te%
5sto sig!i*ica L'e exten1 < mais rpio, especialme!te para listas gra!es%
Pytho! s'porta o operaor ER% (i ER "4two4) < eL'ivale!te a (i.exten1("4two4)!% O operaor ER *'!cio!a com listas, stri!gs, i!teiros
e poe ser sobrecarregao para *'!cio!ar com classes e*i!ias pelo 's'rio% QMais sobre classes !o cap"t'lo 3%R
O operaor < *'!cio!a em listas como 'm repetior% (i R "1, 2) < 3 < eL'ivale!te a (i R "1, 2) E "1, 2) E "1, 2)
co!cate!a as tres listas em 'ma% .5@ME Q_ cria re*ere!cias a mesma listaR
,eitura reco"endada
%o& to Thin' Li'e a (omputer Scientist *ala sobre listas e e!si!a coisas importa!tes sobre o
'so e listas como arg'me!to e *'!I`es%
Python Tutorial mostra como 'sar listas como pilhas e *ilas%
Pytho! ]!o3lege 9ase respo!e perg'!tas com'!s sobre listas e tem basta!tes e8emplos e
cHigo 'sa!o listas%
Python Li!rary #eference s'mari)a toos os m<toos e listas%
Dootnotes
[3\
7ra')io, o termo array seria !a maior parte os casos 'm )etor% O termo array < mais 's'al% Q,%
o 7%R
!.9. )presentando tuplas
-ma t'pla < 'ma lista im'tvel% 7'plas !(o poem ser alteraas epois e criaas%
*+a"ple !.!1. Definindo u"a tupla
777 t R (;.;, ;&;, ;m+i(,*im;, ;Q;, ;ex.m+(e;!
777 t
(4.4, 4&4, 4m+i(,*im4, 4Q4, 4ex.m+(e4!
777 t"0)
4.4
777 t"-1)
4ex.m+(e4
777 t"13)
(4&4, 4m+i(,*im4!
-ma t'pla < e*i!ia a mesma *orma L'e 'ma lista, e8ceto L'e o co!&'!to e eleme!tos eve
estar e!tre par=!teses, !(o colchetes%
Os eleme!tos e 'ma t'pla t=m 'ma orem e*i!ia, ig'al a listas% a!ices e t'plas tamb<m s(o
baseaos em )ero% Por isso, o primeiro eleme!to e 'ma t'pla !(o6va)ia < sempre t"0)%
a!ices !egativos s(o co!taos a partir o *im a t'pla, como !as listas%
.atiar t'plas tamb<m *'!cio!a% ,ote L'e L'a!o 'ma lista < *atiaa, o res'ltao < 'ma lista, e
L'a!o 'ma t'pla < *atiaa o res'ltao < 'ma !ova t'pla%
*+a"ple !.!5. Tuplas n'o t" "todos
777 t
(4.4, 4&4, 4m+i(,*im4, 4Q4, 4ex.m+(e4!
777 t..++en1(;new;!
8*.ce&.c/ (inne*most (.st!
Li(e ;Xinte*.ctive in+3t7;, (ine 1, in N
Att*i&3te>**o* 4t3+(e4 o&Tect h.s no .tt*i&3te 4.++en14
777 t.*emove(;Q;!
8*.ce&.c/ (inne*most (.st!
Li(e ;Xinte*.ctive in+3t7;, (ine 1, in N
Att*i&3te>**o* 4t3+(e4 o&Tect h.s no .tt*i&3te 4*emove4
777 t.in1ex(;ex.m+(e;!
8*.ce&.c/ (inne*most (.st!
Li(e ;Xinte*.ctive in+3t7;, (ine 1, in N
Att*i&3te>**o* 4t3+(e4 o&Tect h.s no .tt*i&3te 4in1ex4
777 ;Q; in t
1
,(o < poss"vel aicio!ar eleme!tos a 'ma t'pla% 7'plas !(o t=m m<toos .++en1 o' exten1%
,(o < poss"vel remover eleme!tos e 'ma t'pla% ,(o e8istem os m<tooso *emove o' +o+%
,(o < possive achar eleme!tos !a lista com o m<too in1ex pois ele !(o e8iste%%
Z poss"vel, por<m, 'sar in para ver se 'm eleme!to e8iste !a t'pla%
E!t(o para L'e servem as t'plas>
7'plas s(o mais rpias L'e listas% 2e voc= est e*i!i!o 'm co!&'!to co!sta!te e valores e
t'o L'e voc= vai *a)er < iterar por eles, 'se 'ma t'pla ao i!v<s e 'ma lista%
2e' cHigo *ica mais seg'ro caso voc= prote&a aos L'e !(o precisam ser m'aos co!tra
gravaI(o% -sar 'ma t'pla < como 'sar 'm coma!o .sse*t impl"cito i)e!o L'e o ao <
ape!as para leit'ra, e L'e < bom pe!sar melhor a!tes e m'ar isso%
0embra6se L'a!o e' isse L'e chaves e icio!rios poem ser i!teiros, stri!gs e Oo'tros
tiposP> 7'plas s(o 'm esses tipos% 7'plas poem ser 'saas como chaves e icio!rios, mas
listas !(o%
[A\

7'plas s(o 'saas !a *ormataI(o e stri!gs, como veremos breveme!te%
7'plas poem ser co!vertias em listas e vice6versa% : *'!I(o i!ter!a t3+(e toma 'ma lista
como parVmetro e retor!a 'ma t'pla com os mesmos eleme!tos, e a *'!Iao (ist toma 'ma
t'pla e retor!a 'ma lista% -ma ma!eira e pe!sar isso < L'e t3+(e co!gela 'ma lista, (ist
esco!gela 'ma t'pla%
,eitura reco"endada
%o& to Thin' Li'e a (omputer Scientist e!si!a sobre t'plas e mostra como co!cate!ar t'plas%
Pytho! ]!o3lege 9ase mostra como ore!ar 'ma t'pla%
Python Tutorial mostra como e*i!ir 'ma t'pla com 'm eleme!to%
Dootnotes
[A\
,a verae < mais complicao L'e isso% Chaves e icio!rios evem ser im'tveis% 7'plas s(o
im'tveis, mas se voc= tiver t'plas e listas o tipo < m'tvel e !(o < seg'ro 's6las como chaves%
:pe!as t'plas e stri!gs, !Kmeros o' o'tras t'plas seg'ras poem ser 'saas como chaves e
icio!rios%
!.16. Declarando variHveis
:gora L'e voc= acha L'e sabe t'o sobre icio!rios, t'plas e listas, vamos voltar ao !osso programa6
e8emplo, o1&che(+e*.+y%
Pytho! tem variveis locais e globais como a maioria as o'tras li!g'age!s, mas !(o h eclaraIJes
e8pl"citas e variveis% 1ariveis passam a e8istir L'a!o 'm valor lhes < atrib'"o e ei8am e
e8istir L'a!o saem e escopo% %
*+a"ple !.!7. Definindo a variHvel myParams
i6 PPn.mePP RR ;PPm.inPP;
myP.*.ms R U;se*ve*;;m+i(,*im;, V
;1.t.&.se;;m.ste*;, V
;3i1;;s.;, V
;+w1;;sec*et; V
W
1rias coisas i!teressa!tes aL'i% Em primeiro l'gar, !ote a i!e!taI(o% -m coma!o i6 < 'm cHigo
e bloco e precisa ser i!e!tao como 'ma *'!I(o%
Em seg'!o l'gar, a atrib'iI(o e variveis < 'm coma!o espalhao por vrias li!has, com 'ma
barra i!vertia QOVPR servi!o como marcaor e co!ti!'aI(o%
;'a!o 'm coma!o < separao em vrias li!has com o si!al e co!ti!'aI(o, QOVPR, as li!has
co!ti!'aas poem ser i!e!taas e L'alL'er ma!eira4 as regras 's'ais e i!e!taI(o o
Pytho! !(o se aplicam% Mas se se' 5/E Pytho! a'to6i!e!ta a li!ha co!ti!'aa, aceite o par(o
a !(o ser L'e ha&a alg'm bom motivo co!tra%
Estritame!te *ala!o, e8pressJes e!tre par=!teses, colchetes o' chaves Qcomo !a e*i!iI(o e 'm
icio!rioR poem ser separaas em vrias li!has com o' sem o caracter e co!ti!'aI(o QOVPR%
E' gosto e i!cl'ir a barra i!vertia mesmo L'a!o !(o < obrigatHria porL'e e' acho L'e ei8a
o cHigo mais *cil e ler, mas < 'ma L'est(o e etilo%
Em terceiro l'gar, voc= !'!ca eclaro' a varivel myP.*.ms, voc= ape!as atrib'i' 'm valor a ela%
.'!cio!a a mesma *orma L'e 192cript sem a opI(o o+tion ex+(icit% .eli)me!te, ao
co!trrio e 192cript, Pytho! !(o permite 'ma re*er=!cia a 'ma varivel L'e !'!ca teve 'm valor
atrib'"o% : te!tativa e *a)er isso leva!ta 'ma e8ceI(o%
*+a"ple !.!:. ;eferncia a variHvel n'o atribuBda
777 x
8*.ce&.c/ (inne*most (.st!
Li(e ;Xinte*.ctive in+3t7;, (ine 1, in N
N.me>**o* 8he*e is no v.*i.&(e n.me1 4x4
777 x R 1
777 x
1
1oce vai agraecer ao Pytho! por isso%
,eitura reco"endada
Python #eference $anual mostra e8emplos e L'a!o voc= poe ei8ar e 'sar o caracter
co!ti!'aor e L'a!o voc= < obrigao a 'sar%
!.11. )tribuindo "Lltiplos valores de u"a veM
-m os atalhos mais i!teressa!tes em Pytho! < 'sar seLb=!cias para atrib'ir mKltiplos valores e 'ma
sH ve)%
*+a"ple !.!=. )tribuindo "Lltiplos valores de u"a veM
777 v R (4.4, 4&4, 4e4!
777 (x, y, Q! R v
777 x
4.4
777 y
4&4
777 Q
4e4
v < 'ma t'pla e tr=s eleme!tos, e (x, y, Q! < 'ma t'pla e tr=s variveis% :trib'ir 'm ao
o'tro atrib'i os valores e v a caa 'ma as variveis, em orem%
5sso tem vrias 'tiliaes% E' *reLbe!teme!te te!ho L'e atrib'ir !omes a 'ma seLbe!cia e valores%
Em C, < poss"vel 'sar en3m e listar ma!'alme!te caa co!sta!te e se' valor associao, o L'e <
partic'larme!te e!te!ia!te L'a!o os valores s(o co!sec'tivos% Em Pytho!, < poss"vel 'sar a *'!I(o
emb'tia *.n,e com atrib'iIJes mKltiplas para rapiame!te atrib'ir valores co!sec'tivos
*+a"ple !.!@. )ssigning consecutive values
777 *.n,e(7!
"0, 1, 2, 3, 4, C, 6)
777 (#:N=AO, 8?>$=AO, W>=N>$=AO, 80?I$=AO, LI'=AO, $A8?I=AO, $?N=AO! R *.n,e(7!
777 #:N=AO
0
777 8?>$=AO
1
777 $?N=AO
6
: *'!I(o emb'tia *.n,e retor!a 'ma lista e i!teiros% Em s'a *orma mais simples, ela recebe
'm limite s'perior como parVmetro e retor!a 'ma lista i!iciaa em 0 com toos os i!teiros at< o
valor o parVmetro, e8cl'sive% Q2e L'iser, < poss"vel passar mais parVmetros para especi*icar 'm
valor i!icial i*ere!te e 0 e 'm i!creme!taor i*ere!te e 1% 1oce poe 'sar +*int
*.n,e.PP1ocPP para ver etalhes%R
#:N=AO, 8?>$=AO, W>=N>$=AO, 80?I$=AO, LI'=AO, $A8?I=AO e $?N=AO s(o variveis
L'e estamos e*i!i!o% QEsse e8emplo vem o mH'lo c.(en1.*, 'm mH'lo i!teressa!te L'e
imprime cale!rios a mesma *orma L'e o coma!o -,5@ c.(% O mH'lo c.(en1.* e*i!e
co!sta!tes i!teiras para os ias a sema!a%R
:gora caa varivel tem se' valor# #:N=AO vale 0, 8?>$=AO vale 1, etc%
Z poss"vel 'sar atrib'iIJes e mKltiplos valores para co!str'ir *'!IJes L'e retor!am mKltiplos
valores, simplesme!te retor!a!o 'ma t'pla com toos os valores% ;'em chama a *'!I(o poe trat6la
como 'ma t'pla, o' atrib'ir valores a variveis i!ivi'ais% 1rias bibliotecas Pytho! par(o *a)em
isso, i!cl'sive o mH'lo os, L'e isc'tiremos !o cap"t'lo 3%
,eitura reco"endada
%o& to Thin' Li'e a (omputer Scientist mostra como 'sar atrib'iIJes e mKltiplos valores
para trocar os valores e 'as variveis%
!.1!. Dor"atando strings
Pytho! *ormata valores em stri!gs% Embora isso possa i!cl'ir e8pressJes basta!tes complicaas, o 'so
mais bsico < i!serir valores em 'ma stri!g com 'sa!o Bs%
.ormataI(o e stri!gs em Pytho! 'sa a mesma si!ta8e L'e a *'!I(o s+*int6 em C%
*+a"ple !.!9. )presentando for"ata&'o de strings
777 / R ;3i1;
777 v R ;s.;
777 ;BsRBs; B (/, v!
43i1Rs.4
: e8press(o toa retor!a 'ma stri!g% O primeiro Bs < s'bstit'"o pelo valor e /4 o seg'!o Bs <
s'bstit'"o pelo valor e v% 7oos os emais caracteres a stri!g Q!esse caso, o si!al e ig'alR
*icam como est(o%
,ote L'e (/, v! < 'ma t'pla% E' isse L'e elas serviam pra algo%
1oc= poe estar acha!o L'e isso < trabalho emais para *a)er 'ma simples co!cate!aI(o e stri!gs, e
voc= est certo, e8ceto L'e *ormataI(o e stri!gs !(o < ape!as co!cate!aI(o% ,a verae, !(o < !em
ape!as *ormataI(o, < tamb<m 'ma *orma e coerI(o e tipo%
*+a"ple !.16. Dor"ata&'o de strings versus concatena&'o
777 3i1 R ;s.;
777 +w1 R ;sec*et;
777 +*int +w1 E ; is not . ,oo1 +.sswo*1 6o* ; E 3i1
sec*et is not . ,oo1 +.sswo*1 6o* s.
777 +*int ;Bs is not . ,oo1 +.sswo*1 6o* Bs; B (+w1, 3i1!
sec*et is not . ,oo1 +.sswo*1 6o* s.
777 3se*%o3nt R 6
777 +*int ;?se*s connecte1 B1; B (3se*%o3nt, !
?se*s connecte1 6
777 +*int ;?se*s connecte1 ; E 3se*%o3nt
8*.ce&.c/ (inne*most (.st!
Li(e ;Xinte*.ctive in+3t7;, (ine 1, in N
8y+e>**o* c.nnot .11 ty+e ;int; to st*in,
E < o operaor e co!cate!aI(o e stri!gs%
,esse caso trivial, a *ormataI(o e stri!gs tem o mesmo res'ltao L'e 'ma co!cate!aI(o%
(3se*%o3nt, ! < 'ma t'pla com 'm eleme!to% 2im, a si!ta8e < estra!ha, mas h 'ma boa
ra)(o para isso# <, sem ambigbiae, 'ma t'pla% ,a verae, voc= sempre poe i!cl'ir 'ma
v"rg'la apHs o Kltimo eleme!to L'a!o e*i!e 'ma lista, t'pla o' icio!rio, mas a v"rg'la <
obrigatHria em 'ma t'pla com ape!as 'm eleme!to% 2e a v"rg'la !(o *osse obrigatHria, o Pytho!
!(o saberia se (3se*%o3nt! < 'ma t'pla com 'm eleme!to o' ape!as o valor e 3se*%o3nt%
.ormataI(o e stri!gs *'!cio!a com i!teiros especi*ica!o B1 ao i!v<s e Bs%
7e!tar co!cate!ar 'ma stri!g com 'ma !(o6stri!g leva!ta 'ma e8ceI(o% :o co!trrio a
*ormataI(o e stri!gs, a co!cate!aI(o sH *'!cio!a L'a!o t'o & *or stri!g%
,eitura reco"endada
Python Li!rary #eference s'mari)a toos os caracteres e *ormataI(o e stri!gs%
*ffecti)e +,- Pro.rammin. isc'te toos os caracteres e *ormato e t<c!icas ava!Iaas e
*ormataI(o e stri!gs como a especi*icaI(o e tama!ho, precis(o e compleme!to com )eros%%
!.11. Mapeando listas
-m os rec'rsos mais poerosos e Pytho! < a compree!s(o e listas QSlist comprehe!sio!SR, L'e <
'ma *orma compacta e mapear 'ma lista com o'tra sem aplicar 'ma *'!I(o a caa eleme!to as
lista%
*+a"ple !.11. )presentando co"preens'o de listas
777 (i R "1, -, 8, 4)
777 "e(em<2 6o* e(em in (i)
"2, 18, 16, 8)
777 (i
"1, -, 8, 4)
777 (i R "e(em<2 6o* e(em in (i)
777 (i
"2, 18, 16, 8)
Para e!te!er o L'e isso sig!i*ica, leia a ireita para a esL'era% (i < a lista L'e voc= est
mapea!o% Pytho! itera pelos eleme!tos e (i 'm a 'm, temorariame!te atrib'i!o o valor e
o'tro eleme!to N varivel e(em% Pytho! e!t(o aplica a e8press(o e(em<2 e aicio!a o res'ltao
N lista retor!aa%
,ote L'e compree!sJes e lista !(o m'am a lista origi!al%
Z seg'ro atrib'ir o res'ltao a compree!s(o e lista N varivel L'e voc= est mapea!o% ,(o h
race co!itio!s .5@ME o' L'alL'er esL'isitisse com L'e se preoc'par4 a !ova lista < co!str'"a
em memHria, e L'a!o a compree!s(o estiver completa, atrib'i o res'ltao N varivel%
*+a"ple !.1!. Co"preens8es de lista e" buildConnectionString
";BsRBs; B (/, v! 6o* /, v in +.*.ms.items(!)
Primeirame!te, !ote L'e estamos chama!o a *'!I(o items o icio!rio +.*.ms% Essa *'!I(o
retor!a 'ma lista e t'plas e toos os aos !o icio!rio%%
*+a"ple !.11. keysN values e items
777 +.*.ms R U;se*ve*;;m+i(,*im;, ;1.t.&.se;;m.ste*;, ;3i1;;s.;,
;+w1;;sec*et;W
777 +.*.ms./eys(!
"4se*ve*4, 43i14, 41.t.&.se4, 4+w14)
777 +.*.ms.v.(3es(!
"4m+i(,*im4, 4s.4, 4m.ste*4, 4sec*et4)
777 +.*.ms.items(!
"(4se*ve*4, 4m+i(,*im4!, (43i14, 4s.4!, (41.t.&.se4, 4m.ste*4!, (4+w14,
4sec*et4!)
O m<too /eys e 'm icio!rio retor!a 'ma lista e toas as chaves% : lista !(o est !a orem
em L'e o icio!rio *or e*i!io Qlembre6se, eleme!tos em 'm icio!rio !(o t=m oremR, mas <
'ma lista%
O m<too v.(3es retor!a 'ma lista e toos os valores% : lista est !a mesma orem L'e a lista
retor!aa por /eys, porta!to +.*.ms.v.(3es(!"n) RR +.*.ms"+.*.ms./eys(!
"n)) para toos os valores e n%
O m<too items retor!a 'ma t'pla !o *ormato (chave, valor!% : lista co!t<m toos os
aos !o icio!rio%
:gora vamos ver o L'e &3i(1%onnection$t*in, *a)% Ela toma 'ma lista, +.*.ms.items
(!, e a mapeia a 'ma !ova lista aplica!*o *ormataI(o e stri!g a caa eleme!to% : !ova lista tem o
mesmo !Kmero e eleme!tos L'e +.*.ms.items(!, mas caa eleme!to !a !ova lista ser 'ma
stri!g L'e co!t<m ta!to 'ma chave L'a!to se' valor associao !o icio!rio +.*.ms%
*+a"ple !.15. Co"preens'o de listas e" buildConnectionStringN passo a
passo
777 +.*.ms R U;se*ve*;;m+i(,*im;, ;1.t.&.se;;m.ste*;, ;3i1;;s.;,
;+w1;;sec*et;W
777 +.*.ms.items(!
"(4se*ve*4, 4m+i(,*im4!, (43i14, 4s.4!, (41.t.&.se4, 4m.ste*4!, (4+w14,
4sec*et4!)
777 "/ 6o* /, v in +.*.ms.items(!)
"4se*ve*4, 43i14, 41.t.&.se4, 4+w14)
777 "v 6o* /, v in +.*.ms.items(!)
"4m+i(,*im4, 4s.4, 4m.ste*4, 4sec*et4)
777 ";BsRBs; B (/, v! 6o* /, v in +.*.ms.items(!)
"4se*ve*Rm+i(,*im4, 43i1Rs.4, 41.t.&.seRm.ste*4, 4+w1Rsec*et4)
,ote L'e estamos 'sa!o 'as variveis para iterar pela lista +.*.ms.items(!% Esse < mais
'm caso o 'so e atrib'iI(o mKltipla% O primeiro eleme!to e +.*.ms.items(! <
(4se*ve*4, 4m+i(,*im4!, e!t(o !a primeira iteraI(o a compree!s(o, / receber
4se*ve*4 e v receber 4m+i(,*im4% ,esse caso estamos ig!ora!o o valor e v e i!cl'i!o
ape!as o valor e / !a lista retor!aa, e!t(o essa compree!s(o acaba se!o eL'ivale!te a
+.*.ms./eys(!% Q1oc= !(o precisaria 'sar 'ma compree!s(o como essa em cHigo e
pro'I(o% Esse < 'm e8emplo simples para apre!ermos o L'e est aco!tece!o aL'i%R
:L'i *a)emos a mesma coisa, ig!ora!o o valor e /, porta!to essa compree!s(o e lista acaba
se!o eL'ivale!te a +.*.ms.v.(3es(!%
Combi!a!o os e8emplos a!teriores com alg'ma *ormataI(o e stri!g, co!seg'imos 'ma lista e
stri!gs L'e i!cl'i ta!to a chave e L'a!to o valor e caa eleme!to o icio!rio% 5sso se parece
m'ito com a sa"a o programa4 t'o L'e resta < &'!tar os eleme!tos essa lista em 'ma K!ica
stri!g%
,eitura reco"endada
Python Tutorial isc'te o'tra *orma e mapear listas 'sa!o a *'!I(o i!ter!a m.+ %
Python Tutorial mostra *a)er compree!sJes e listas e!tro e compree!sJes e listas%
!.15. /nindo listas e separando strings
1oc= tem 'ma lista e pares chave6valor !o *ormato chaveRvalor e voc= L'er '!i6los em 'ma
K!ica stri!g% Para &'!tar L'alL'er lista e stri!gs, 'se o m<too Toin o ob&eto stri!g%
*+a"ple !.17. /nindo a lista e" buildConnectionString
*et3*n ;S;.Toin(";BsRBs; B (/, v! 6o* /, v in +.*.ms.items(!)!
-ma !ota i!teressa!te a!tes e co!ti!'armos% E' repito o tempo too L'e *'!IJes s(o ob&etos, stri!gs
s(o ob&etos, t'o < 'm ob&eto% 1oc= poe ter e!te!io L'e as )ari/)eis L'e co!t=m stri!gs s(o
ob&etos% Mas e8ami!e c'iaosame!te o prH8imo e8emplo e voc= ver L'e a prHpria stri!g ;S; < 'm
ob&eto, e voc= estar chama!o se' m<too Toin%
Co!ti!'a!o, o m<too Toin '!e os eleme!tos e 'ma lista em 'ma K!ica stri!g, com caa eleme!to
separao por po!to6e6v"rg'la% O elimitaor !(o precisa ser 'm po!to6e6v"rg'la, e !em seL'er precisa
ser ape!as 'm caracter% ;'alL'er stri!g serve%
Toin *'!cio!a ape!as com listas e stri!gs, e !(o *a) !e!h'm o'tro tipo e coerI(o% 7e!tar '!ir
com Toin 'ma lista L'e tem 'm o' mais eleme!tos !(o6stri!g leva!ta 'ma e8ceI(o%
*+a"ple !.1:. 2aBda de odbchelper.py
777 +.*.ms R U;se*ve*;;m+i(,*im;, ;1.t.&.se;;m.ste*;, ;3i1;;s.;,
;+w1;;sec*et;W
777 ";BsRBs; B (/, v! 6o* /, v in +.*.ms.items(!)
"4se*ve*Rm+i(,*im4, 43i1Rs.4, 41.t.&.seRm.ste*4, 4+w1Rsec*et4)
777 ;S;.Toin(";BsRBs; B (/, v! 6o* /, v in +.*.ms.items(!)!
4se*ve*Rm+i(,*imS3i1Rs.S1.t.&.seRm.ste*S+w1Rsec*et4
Essa stri!g < e!t(o retor!aa a *'!I(o o1&che(+e* e impressa pelo bloco L'e a chamo', L'e por
s'a ve) imprime a sa"a L'e ei8o' voc= maravilhao !o i!"cio esse cap"t'lo%
>ota histArica. ;'a!o apre!i Pytho!, e' esperava L'e Toin *osse 'm m<too e 'ma lista e L'e
tomaria o elimitaor como arg'me!to% M'itas pessoas acham isso, mas h 'ma histHria L'e &'sti*ica
o m<too Toin% :!tes o Pytho! 1%F, stri!gs !(o ti!ham esses m<toos toos% Eavia 'm mH'lo
st*in, separao L'e co!ti!ha toas as *'!IJes e stri!gs, e toas essas *'!IJes tomavam 'ma
stri!g como primeiro arg'me!to% Essas *'!IJes *oram co!sieraas importa!tes o s'*icie!te para
serem colcaas e!tro as prHprias stri!gs, o L'e *a)ia se!tio para *'!IJes como (owe*, 3++e* e
s+(it% Mas m'itos *(s traicio!ais o Pytho! se op'seram ao m<too Toin, arg'me!ta!o L'e ele
everia ser 'm m<too as listas, o' pelo me!os L'e !(o everia sair o mH'lo st*in, QL'e ai!a
tem m'ita coisa KtilR% E' 'so o !ovo m<too Toin e8cl'sivame!te, mas voc= poe ver cHigo escrito
as 'as *ormas, e caso essa *orma o i!comoe, 'se a *'!Iao a!tiga st*in,.Toin%
1oc= eve estar se perg'ta!o se h 'ma *orma a!loga e iviir 'ma stri!g em 'ma lista% E claro
L'e h, e se chama s+(it%
*+a"ple !.1=. Dividindo u"a string
777 (i R "4se*ve*Rm+i(,*im4, 43i1Rs.4, 41.t.&.seRm.ste*4, 4+w1Rsec*et4)
777 s R ;S;.Toin((i!
777 s
4se*ve*Rm+i(,*imS3i1Rs.S1.t.&.seRm.ste*S+w1Rsec*et4
777 s.s+(it(;S;!
"4se*ve*Rm+i(,*im4, 43i1Rs.4, 41.t.&.seRm.ste*4, 4+w1Rsec*et4)
777 s.s+(it(;S;, 1!
"4se*ve*Rm+i(,*im4, 43i1Rs.S1.t.&.seRm.ste*S+w1Rsec*et4)
s+(it reverte Toin, pois ivie 'ma stri!g em 'ma lista e vrios eleme!tos% ,ote L'e o
elimitaor QOSPR *oi removio totalme!te, e !(o *a) parte os eleme!tos a lista retor!aa%
s+(it aceita 'm seg'!o arg'me!to opcio!al, a L'a!tiae m8ima e eleme!tos a lista%
QOSOh, arg'me!tos opcio!ais%%%P 1oc= vai apre!er como *a)er isso em s'as prHprias *'!IJes !o
prH8imo cap"t'lo%R
qualquerstring.s+(it(delimitador, 1! < 'ma t<c!ica Ktil L'a!o voc= L'er
proc'rar 'ma stri!g em o'tra e e!t(o trabalhar com t'o a!tes o te8to e!co!trao QL'e *ica !o
primeiro eleme!to a lista retor!aaR e t'o epois o te8to e!co!trao QL'e *ica epois o
seg'!o eleme!toR% .5@ME rever estilo%
,eitura reco"endada
Pytho! ]!o3lege 9ase respo!e perg'!tas com'!s sobre stri!gs e tem m'itos e8emplos e
cHigo 'sa!o stri!gs%
Python Li!rary #eference s'mari)a toos os m<toos e stri!gs%
Python Li!rary #eference oc'me!ta o mH'lo st*in, %
The ,hole Python F+0 e8plica porL'e Toin < 'm m<too e stri!g e !(o 'm m<too e
lista%
!.17. ;esu"o
O programa o1&che(+e*.+y e s'a sa"a *a)em total se!tio%
*+a"ple !.1@. odbchelper.py
1e6 &3i(1%onnection$t*in,(+.*.ms!
;;;M3i(1 . connection st*in, 6*om . 1iction.*y o6 +.*.mete*s.
Iet3*ns st*in,.;;;
*et3*n ;S;.Toin(";BsRBs; B (/, v! 6o* /, v in +.*.ms.items(!)!
i6 PPn.mePP RR ;PPm.inPP;
myP.*.ms R U;se*ve*;;m+i(,*im;, V
;1.t.&.se;;m.ste*;, V
;3i1;;s.;, V
;+w1;;sec*et; V
W
+*int &3i(1%onnection$t*in,(myP.*.ms!
*+a"ple !.19. 2aBda de odbchelper.py
se*ve*Rm+i(,*imS3i1Rs.S1.t.&.seRm.ste*S+w1Rsec*et
:!tes e merg'lhar !o prH8imo cap"t'lo, certi*iL'e6se e L'e voc= *a) co!*ortavelme!te as seg'i!tes
tare*as#
-sar o 5/E Pytho! para testar e8pressJes i!terativame!te
Escrever mH'los e *orma L'e tamb<m possam ser 'saos como programas a'to6s'*icie!tes,
pelo me!os para *i!s e teste
5mportar mH'los e chamar s'as *'!IJes
/eclarar *'!IJes 'sa!o 1oc st*in, s , variveis locais e i!e!taI(o correta
/e*i!ir icio!rios, t'plas e listas
:cessar atrib'tos e m<toos e L'alL'er ob&eto, i!cl'sive stri!gs, listas, icio!rios, *'!IJes e
mH'los
Co!cate!ar valores com *ormataI(o e stri!gs
Mapear listas em o'tras listas 'sa!o compree!sJes e listas
/iviir stri!gs em listas e '!ir listas em stri!gs
Chapter 1. % poder da introspec&'o
3%1% Merg'lha!o
3%2% :rg'me!tos opcio!ais e !omeaos
3%3% type, str, ir, e o'tras *'!IJes i!ter!as
3%A% E8trai!o re*er=!cias a ob&etos com getattr
3%C% .iltra!o listas
3%F% : !at're)a pec'liar e a! e or
3%G% -si!g lamba *'!ctio!s
3%8% P'tti!g it all together
3%B% 2'mmary
1.1. Mergulhando
O prese!te cap"t'lo cobre 'm os po!tos *ortes o Pytho!# i!trospecI(o% Como voc= eve saber, t'o
em Pytho! < 'm ob&eto% : i!trospecI(o < a capaciae e *a)er cHigo L'e e8ami!a e ma!ip'la
mH'los e *'!IJes em memHria como ob&etos% : partir aL'i, e*i!iremos *'!IJes sem !omes,
chamaremos *'!IJes com arg'me!tos *ora e orem e *aremos re*er=!cia *'!IJes c'&os !omes !(o
co!hecemos previame!te%
:L'i temos 'm programa Pytho! completo e *'!cio!al% 1oc= eve e!te!er boa parte ele% :s li!has
!'meraas il'stram co!ceitos cobertos em (onhecendo o Python% ,(o se preoc'pe se o resto parecer
i!timiaor4 voc= vai apre!er t'o isso !o ecorrer esse cap"t'lo%
*+a"ple 1.1. apihelper.py
5* yo' have !ot alreay o!e so, yo' ca! o3!loa this a! other e8amples 'se i! this book%
1e6 he(+(o&Tect, s+.cin,R10, co((.+seR1!
;;;P*int metho1s .n1 1oc st*in,s.

8./es mo13(e, c(.ss, (ist, 1iction.*y, o* st*in,.;;;
metho19ist R "metho1 6o* metho1 in 1i*(o&Tect! i6 c.((.&(e(,et.tt*(o&Tect,
metho1!!)
+*ocessL3nc R co((.+se .n1 ((.m&1. s ; ;.Toin(s.s+(it(!!! o* ((.m&1. s s!
+*int ;Vn;.Toin(";Bs Bs; B
(metho1.(T3st(s+.cin,!,
+*ocessL3nc(st*(,et.tt*(o&Tect, metho1!.PP1ocPP!!!
6o* metho1 in metho19ist)!
i6 PPn.mePP RR ;PPm.inPP;
+*int he(+.PP1ocPP
Este mH'lo tem ape!as 'ma *'!I(o, he(+% /e acoro com s'a eclaraI(o, ela aceita tr=s
parVmetros# o&Tectv, s+.cin, e co((.+se% Os ois Kltimos s(o !a verae opcio!ais, como
veremos em breve%
: *'!I(o he(+ tem 'ma 1oc st*in, m'lti6li!has L'e s'ci!tame!te escreve se' propHsito%
,ote L'e !e!h'm valor e retor!o < me!cio!ao# esta *'!I(o ser 'saa ape!as pelos se's e*eitos,
!(o por se' valor e retor!o%
O cHigo e!tro a *'!I(o est i!e!tao%
O tr'L'e i6 PPn.mePP permite L'e o programa *aIa algo Ktil L'a!o e8ec'tao so)i!ho, sem
impeir se' 'so como 'm mH'lo por o'tros programas% ,esse caso, o programa simplesme!te
imprime a 1oc st*in, a *'!I(o he(+%
Coma!os i6 'sam RR para comparaI(o, e par=!teses !(o s(o obrigatHrios%
: *'!I(o he(+ *oi pro&etaa para ser 'saa por voc=, programaor, e!L'a!to trabaliha !o Pytho!
5/E% Ela aceita L'alL'er ob&eto L'e tem *'!IJes o' m<toos Qcomo 'm mH'lo, L'e tem *'!IJes, o'
'ma lista, L'e tem m<toosR e imprime as *'!IJes e as 1oc st*in,s%
*+a"ple 1.!. *+e"plo de uso de apihelper.py
777 6*om .+ihe(+e* im+o*t he(+
777 (i R ")
777 he(+((i!
.++en1 9..++en1(o&Tect! -- .++en1 o&Tect to en1
co3nt 9.co3nt(v.(3e! -7 inte,e* -- *et3*n n3m&e* o6 occ3**ences o6 v.(3e
exten1 9.exten1((ist! -- exten1 (ist &y .++en1in, (ist e(ements
in1ex 9.in1ex(v.(3e! -7 inte,e* -- *et3*n in1ex o6 6i*st occ3**ence o6 v.(3e
inse*t 9.inse*t(in1ex, o&Tect! -- inse*t o&Tect &e6o*e in1ex
+o+ 9.+o+("in1ex)! -7 item -- *emove .n1 *et3*n item .t in1ex (1e6.3(t
(.st!
*emove 9.*emove(v.(3e! -- *emove 6i*st occ3**ence o6 v.(3e
*eve*se 9.*eve*se(! -- *eve*se <'N P9A%><
so*t 9.so*t("cm+63nc)! -- so*t <'N P9A%><S i6 ,iven, cm+63nc(x, y! -7 -1,
0, 1
Por par(o a sa"a < *ormataa para ser leg"vel% 1oc st*in,s m'lti6li!has s(o tra!s*ormaas em
'ma li!ha lo!ga% Esse comportame!to poe ser alterao especi*ica!o 0 como valor o arg'me!to
collapse% 2e os !omes e *'!I(o *orem mais lo!gos L'e 10 caracteres, voc= poe especi*icar 'm
valor maior para o parVmetro spacing para ei8ar a sa"a mais *cil e ler%
*+a"ple 1.1. /so avan&ado de apihelper.py
777 im+o*t o1&che(+e*
777 he(+(o1&che(+e*!
&3i(1%onnection$t*in, M3i(1 . connection st*in, 6*om . 1iction.*y Iet3*ns st*in,.
777 he(+(o1&che(+e*, 30!
&3i(1%onnection$t*in, M3i(1 . connection st*in, 6*om . 1iction.*y
Iet3*ns st*in,.
777 he(+(o1&che(+e*, 30, 0!
&3i(1%onnection$t*in, M3i(1 . connection st*in, 6*om . 1iction.*y

Iet3*ns st*in,.
1.!. )rgu"entos opcionais e no"eados
Pytho! s'porta valores par(o para arg'me!tos e *'!IJes% 2e a *'!I(o *or chamaa sem o
arg'me!to, o valor par(o < 'sao% :l<m isso, arg'me!tos poem ser especi*icaos em L'alL'er
orem 'sa!o arg'me!tos !omeaos% Proceime!tos emb'tios em 7ra!sact$2;0 poem *a)er isso
tamb<m% 2e voc= co!hecer 2;0 2erver poe passar rapiame!te por essa parte%
*+a"ple 1.5. helpN u"a fun&'o co" dois argu"entos opcionais
1e6 he(+(o&Tect, s+.cin,R10, co((.+seR1!
s+.cin, e co((.+se s(o opcio!ais, 'ma ve) L'e se's valores par(o est(o e*i!ios% o&Tect <
obrigatHrio, pois !e!h'm valor par(o *oi e*i!io% 2e he(+ *or chamao com ape!as 'm arg'me!to,
s+.cin, ser 10 e co((.+se ser 1% 2e he(+ *or chamao com ois arg'me!tos, co((.+se
ser por par(o 1%
2'po!ha L'e voc= L'eira especi*icar o valor e co((.+se mas L'eira aceitar o valor par(o e
s+.cin,% ,a maioria as o'tras li!g'age!s isso !(o < poss"vel pois seria obrigatHrio passar tr=s
parVmetros% Mas em Pytho! arg'me!tos poem ser especi*icaos pelo !ome, em L'alL'er orem%
*+a"ple 1.7. Cha"adas vHlidas de help
he(+(o1&che(+e*!
he(+(o1&che(+e*, 12!
he(+(o1&che(+e*, co((.+seR0!
he(+(s+.cin,R1C, o&TectRo1&che(+e*!
Com ape!as 'm arg'me!to, s+.cin, *ica com o valor par(o 10 e co((.+se *ica com o valor
par(o 1%
Com ois arg'me!tos, co((.+se *ica com o valor par(o 1%
:L'i voc= est !omea!o o arg'me!to co((.+se e8plicitame!te e especi*ica!o se' valor%
s+.cin, co!ti!'a com o valor par(o 10%
Mesmo arg'me!tos obrigatHrios Qcomo o&Tect, L'e !(o tem 'm valor par(oR poem ser
!omeaos, e os arg'me!tos !omeaos poem aparecer em L'alL'er orem%
5sso parece partic'larme!te estra!ho at< voc= perceber L'e os arg'me!tos s(o simplesme!te 'm
icio!rio% O m<too O!ormalP e chamar *'!IJes sem !omes e arg'me!tos < ape!as 'm atalho em
L'e o Pytho! associa os valores com os arg'me!tos !a orem L'e voc= especi*ico' !a eclaraI(o% E
!a maior parte o tempo, as *'!IJes ser(o chamaas o &eito O!ormalP, e a *le8ibiliae aicio!al
estar l L'a!o voc= precisar%
: K!ica coisa L'e voc= cecisa *a)er para chamar 'ma *'!I(o < especi*icar 'm valor Qe L'alL'er
*ormaR para caa arg'me!to obrigatHrio% : ma!eira e a orem voc= L'e escolhe%
,eitura adicional
Python Tutorial isc'te L'a!o e8atame!te e como arg'me!tos par(o s(o avaliaos, o L'e
importa L'a!o o valor par(o *or 'ma lista o' 'ma e8press(o com e*eitos colaterais QSsie
e**ectsSR%
1.1. typeN strN dirN e outras fun&8es internas
Pytho! tem 'm peL'e!o co!&'!to e *'!IJes e8tremame!te Kteis% 7oas as o'tras *'!IJes s(o
particio!aas em mH'los% 5sso *oi 'ma ecis(o e pro&eto co!scie!te, e *orma a ma!ter o !Kcleo
li!g'agem livre os e8cessos e o'tras li!g'age!s e script Qco* co*, 1is'al 9asicR%
: *'!I(o ty+e retor!a o tipo e 'm ob&eto arbitrrio% Os tipos poss"veis s(o listaos !o mH'lo
ty+es% Esse rec'rso < Ktil em *'!IJes a'8iliares L'e poem ma!ip'lar iversos tipos e aos%
*+a"ple 1.:. IntroduMindo type
777 ty+e(1!
Xty+e 4int47
777 (i R ")
777 ty+e((i!
Xty+e 4(ist47
777 import o1&che(+e*
777 ty+e(o1&che(+e*!
Xty+e 4mo13(e47
777 import ty+es
777 ty+e(o1&che(+e*! RR ty+es.#o13(e8y+e
1
ty+e recebe L'alL'er coisa como valor e retor!a o tipo% E e' realme!te L'is i)er L'alL'er coisa# i!teiros, stri!gs, lsitas, icio!rios, t'plas,
*'!IJes, classes, mH'los, at< mesmo tipos%
ty+e recebe 'ma varivel e retor!a se' tipo%
ty+e tamb<m *'!cio!a com mH'los%
Z poss"vel 'sar as co!sta!tes !o mH'lo ty+es para comparar tipos e ob&etos% Z isso L'e a *'!I(o he(+ *a), como veremos em breve%
st* pega aos e retor!a como stri!g% 7oos os tipos poem ser tra!s*ormaos em stri!g%
*+a"ple 1.=. IntroduMindo str
777 st*(1!
414
777 ho*semen R "4w.*4, 4+esti(ence4, 46.mine4)
777 ho*semen..++en1(4Powe*&3i(1e*4!
777 st*(ho*semen!
;"4w.*4, 4+esti(ence4, 46.mine4, 4Powe*&3i(1e*4);
777 st*(o1&che(+e*!
;Xmo13(e 4o1&che(+e*4 6*om 4cVV1oc&oo/VV1i+VV+yVVo1&che(+e*.+y47;
777 st*(None!
4None4
Para tipos e aos simples como i!teiros, seria !ormal esperar L'e st* *'!cio!aria, pois virt'alme!te toas as li!g'age!s t=m 'ma *orma e
co!verter i!teiros em stri!gs%
st*, por<m, *'!cio!a com L'alL'er tipo% :L'i *'!cio!a com 'ma lista L'e co!str'imos em peaIos%
st* tamb<m *'!cio!a com mH'los% ,ote L'e a represe!taI(o como stri!g e 'm mH'lo i!cl'i o cami!ho o mH'lo !o isco, e!t(o se'
res'ltao ser i*ere!te%
-m comportame!to s'til mas importa!te e st* < o *ato e *'!cio!ar com None, o valor !'lo e Pytho!% O retor!o < a stri!g
'sar isso a !osso *avor !a *'!I(o he(+ como veremos em breve%
,o coraI(o e !ossa *'!I(o he(+ est a poerosa *'!I(o 1i*% 1i* retor!a 'ma lista os atrib'tos e
m<toos e L'alL'er ob&eto# mH'los, *'!IJes, listas, stri!gs, icio!rios%%% virt'alme!te t'o%
*+a"ple 1.@. IntroduMindo dir
777 (i R ")
777 1i*((i!
"4.++en14, 4co3nt4, 4exten14, 4in1ex4, 4inse*t4, 4+o+4, 4*emove4, 4*eve*se4,
4so*t4)
777 1 R UW
777 1i*(1!
"4c(e.*4, 4co+y4, 4,et4, 4h.sP/ey4, 4items4, 4/eys4, 4set1e6.3(t4, 43+1.te4,
4v.(3es4)
777 import o1&che(+e*
777 1i*(o1&che(+e*!
"4PP&3i(tinsPP4, 4PP1ocPP4, 4PP6i(ePP4, 4PPn.mePP4, 4&3i(1%onnection$t*in,4)
(i < 'ma lista, porta!to 1i*((i! retor!a 'ma lista e toos os m<toos a lista% ,ote L'e a lista retor!aa co!t<m os !omes os m<toos como
stri!gs, !(o os prHprios m<toos%
1 < 'm icio!rio, porta!to 1i*(1! retor!a 'ma lista e toos os !omes os m<toos e icio!rios% Pelo me!os 'm eles,
*amiliar%
Z aL'i L'e as coisas *icam i!teressa!tes% o1&che(+e* < 'm mH'lo, porta!to 1i*(o1&che(+e*! retor!a 'ma lista e t'o L'e estiver
e*i!io !esse mH'lo, i!cl'sive atrib'tos i!ter!os como PPn.mePP e PP1ocPP, e L'aisL'er o'tros atrib'tos e m<toos L'e voc= e*i!ir% ,esse
caso, o1&che(+e* tem ape!as 'm m<too e*i!io pelo 's'rio, a *'!I(o &3i(1%onnection$t*in, L'e est'amos em
Python%
.i!alme!te, a *'!I(o c.((.&(e recebe como parVmetro 'm ob&eto e retor!a 1 se o ob&eto p'er ser
chamao o' 0 caso co!trrio% Ob&etos chamveis i!cl'em *'!IJes, m<toos e classes e at< mesmo as
prHprias classes% QMais sobre classes !o cap"t'lo 3%R
*+a"ple 1.9. IntroduMindo callable
777 import st*in,
777 st*in,.+3nct3.tion
4@;#HB[V4(!<E,-.5SXR7N2"VV)\P]U^WA4
777 st*in,.Toin
X63nction Toin .t 00%CCA7%7
777 c.((.&(e(st*in,.+3nct3.tion!
0
777 c.((.&(e(st*in,.Toin!
1
777 print st*in,.Toin.PP1ocPP
Toin((ist ",se+)! -7 st*in,
Iet3*n . st*in, com+ose1 o6 the wo*1s in (ist, with
inte*venin, occ3**ences o6 se+. 8he 1e6.3(t se+.*.to* is .
sin,(e s+.ce.
(Toin6ie(1s .n1 Toin .*e synonymo3s!
:s *'!IJes !o mH'lo st*in, s(o obsoletas Qembora m'ita ge!te ai!a 'se a *'!I(o ToinR, mas o mH'lo co!t<m m'itas co!sta!tes Kteis como
st*in,.+3nct3.tion, L'e co!t<m toos os caracteres e po!t'aI(o%
st*in,.Toin < 'ma *'!I(o L'e '!e 'ma lista e stri!gs%
st*in,.+3nct3.tion !(o < chamvel .5@ME, e sim 'ma stri!g% Q-ma stri!g tem ob&etos chamveis, mas ela prHpria !(o < chamvel%R
st*in,.Toin < chamvel4 < 'ma *'!I(o L'e aceita ois arg'me!tos%
;'alL'er ob&eto chamvel poe ter 'ma 1oc st*in,% -sa!o a *'!I(o c.((.&(e em caa 'm os atrib'tos o ob&eto, poemos etermi!ar
com L'ais atrib'tos !os importamos Qm<toos, *'!IJes, classesR e L'ais L'eremos ig!orar Qco!ta!tes, etc.R sem saber !aa sobre o ob&eto
previame!te%
ty+e, st*, 1i* e toas as o'tras *'!IJes i!ter!as o Pytho! est(o agr'paas !o mH'lo
PP&3i(tinPP% QO !ome tem ois s'bli!haos !o comeIo e ois !o *im%R 2e a&'ar, pe!se L'e
Pytho! a'tomaticame!te e8ec'ta 6*om PP&3i(tinPP im+o*t < ao i!iciar, o L'e importa
toas as *'!IJes esse mH'lo !o escopo at'al para L'e possam ser 'saas iretame!te%
: va!tagem e pe!sar essa *orma < L'e < poss"vel acessar toas as *'!IJes e atrib'tos i!ter!os
e8ami!a!o o mH'lo PP&3i(tinPP% E aivi!he sH, !Hs temos 'ma *'!I(o para *a)er isso# ela se
chama he(+% 7e!te *a)er isso e e8ami!e a lista agora4 !Hs merg'lharemos em alg'mas as *'!IJes
mais importa!tes mais tare% Qalg'mas as classes e erro i!ter!as, como Att*i&3te>**o*,
evem ser *amiliares%R
*+a"ple 1.16. Dun&8es e atributos internos
777 from .+ihe(+e* import he(+
777 import PP&3i(tinPP
777 he(+(PP&3i(tinPP, 20!
A*ithmetic>**o* M.se c(.ss 6o* .*ithmetic e**o*s.
Asse*tion>**o* Asse*tion 6.i(e1.
Att*i&3te>**o* Att*i&3te not 6o3n1.
>:L>**o* Ie.1 &eyon1 en1 o6 6i(e.
>nvi*onment>**o* M.se c(.ss 6o* '5: *e(.te1 e**o*s.
>xce+tion %ommon &.se c(.ss 6o* .(( exce+tions.
L(o.tin,Point>**o* L(o.tin, +oint o+e*.tion 6.i(e1.
':>**o* '5: o+e*.tion 6.i(e1.
"...co*te...)
Pytho! vem com ma!'ais e re*er=!cia e8cele!tes, L'e voc= eve 'sar largame!te para co!hecer toos os mH'los L'e Pytho! o*erece% Mas
e!L'a!to em o'tras li!g'age!s voc= *icaria volta!o o tempo too aos ma!'ais Qo' ma! pages, o', /e's te livre, a M2/,R para se lembrar como
's6los, Pytho! < !a maior parte a'to6oc'me!tao%
,eitura reco"endada
Python Li!rary #eference oc'me!ta toas as *'!IJes i!ter!as e toas as e8ceIJes i!ter!as%
1.5. *+traindo referncias a obCetos co" getattr
1oc= & sabe L'e *'!IJes s(o ob&etos% O L'e voc= !(o sabe ai!a < L'e < poss"vel *a)er re*er=!cia a
'ma *'!I(o sem saber se' !ome at< o tempo e e8ec'I(o, 'sa!o a *'!I(o ,et.tt*%
*+a"ple 1.11. )presentando getattr
777 (i R ";9.**y;, ;%3*(y;)
777 (i.+o+
X&3i(t-in metho1 +o+ o6 (ist o&Tect .t 010=L8847
777 ,et.tt*((i, ;+o+;!
X&3i(t-in metho1 +o+ o6 (ist o&Tect .t 010=L8847
777 ,et.tt*((i, ;.++en1;!(;#oe;!
777 (i
";9.**y;, ;%3*(y;, ;#oe;)
777 ,et.tt*(UW, ;c(e.*;!
X&3i(t-in metho1 c(e.* o6 1iction.*y o&Tect .t 00L113=47
777 ,et.tt*((!, ;+o+;!
8*.ce&.c/ (inne*most (.st!
Li(e ;Xinte*.ctive in+3t7;, (ine 1, in N
Att*i&3te>**o* 4t3+(e4 o&Tect h.s no .tt*i&3te 4+o+4
:L'i temos 'ma re*er=!cia ao m<too +o+ a lista% ,ote L'e !(o estamos chama!o o m<too
+o+, L'e seria *eito com (i.+o+(!R% Z 'ma re*er=!cia ao prHprio m<too%
5sso tamb<m retor!a 'ma re*er=!cia ao m<too +o+, mas essa ve), o !ome o m<too <
especi*icao como arg'me!to a *'!I(o ,et.tt*% ,et.tt* < 'ma *'!I(o i!ter!a m'ito Ktil
L'e retor!a L'alL'er atrib'to e L'alL'er ob&eto% ,esse caso, o ob&eto < 'ma lista, e o atrib'to < o
m<too +o+
Caso voc= !(o te!ha percebio como isso < Ktil, te!te isso# o valor e retor!o e ,et.tt* o
m<too, L'e voc= poe e!t(o chamar como se tivesse 'sao (i..++en1(;#oe;! iretame!te%
Mas voc= !(o chamo' a *'!I(o iretame!te# voc= especi*ico' o !ome a *'!I(o como 'ma stri!g%
,et.tt* tamb<m *'!cio!a com icio!rios%
Em tese, ,et.tt* everia *'!cio!ar com t'plas, e8ceto L'e t'plas !(o t=m m<toos, porta!to
,et.tt* leva!ta 'ma e8ceI(o !(o importa L'e !ome e atrib'to voc= 'se%
,et.tt* !(o < ape!as para tipos emb'tios% 7amb<m *'!cio!a com mH'los%
*+a"ple 1.1!. getattr in apihelper.py
777 im+o*t o1&che(+e*
777 o1&che(+e*.&3i(1%onnection$t*in,
X63nction &3i(1%onnection$t*in, .t 00=18==47
777 ,et.tt*(o1&che(+e*, ;&3i(1%onnection$t*in,;!
X63nction &3i(1%onnection$t*in, .t 00=18==47
777 o&Tect R o1&che(+e*
777 metho1 R ;&3i(1%onnection$t*in,;
777 ,et.tt*(o&Tect, metho1!
X63nction &3i(1%onnection$t*in, .t 00=18==47
777 ty+e(,et.tt*(o&Tect, metho1!!
Xty+e 463nction47
777 im+o*t ty+es
777 ty+e(,et.tt*(o&Tect, metho1!! RR ty+es.L3nction8y+e
1
777 c.((.&(e(,et.tt*(o&Tect, metho1!!
1
5sso retor!a 'ma re*er=!cia N *'!I(o &3i(1%onnection$t*in, o mH'lo o1&che(+e*
L'e est'amos em (onhecendo o Python% QO e!ereIo he8aecimal < espec"*ico a mi!ha
mL'i!a% O se' ser i*ere!te%R
-sa!o ,et.tt*, poemos pegar 'ma re*er=!cia N mesma *'!I(o% +eralme!te, ,et.tt*
(objeto, ;atributo;! < eL'ivale!te a objeto.atributo% 2e objeto *or 'm
mH'lo, atributo poe ser L'alL'er coisa e*i!ia !o mH'lo# 'ma *'!I(o, classe o' varivel
global%
E < isso L'e 'samos !a *'!I(o he(+% o&Tect < passao para a *'!I(o como 'm arg'me!to, e
metho1 < 'ma stri!g L'e < o !ome e 'm m<too o' e 'ma *'!I(o%
,esse caso, metho1 < o !ome e 'ma *'!I(o, o L'e poemos provar veri*ica!o se' tipo%
Como metho1 < 'ma *'!I(o, < chamvel%
1.7. Diltrando listas
Como voc= sabe, Pytho! tem rec'rsos poerosos para mapear listas em o'tras listas 'sa!o
compree!sJes% 5sso poe ser combi!ao com 'm meca!ismo e *iltragem, em L'e alg'!s eleme!tos
a lista s(o mapeaos e o'tros s(o ig!oraos%
*+a"ple 1.11. 2inta+e para filtrage" de listas
"expresso-de-mapeamento 6o* elemento in lista-de-origem i6 expresso-de-
filtragem)
5sso < 'ma e8te!s(o as compree!sJes e lista L'e voc= co!hece e co!*ia% :s primeiras 'as partes
s(o ig'ais4 a Kltima parte, i!iciaa !o i6, < a e8press(o e *iltragem% -ma e8press(o e *iltragem
poe ser L'alL'er e8press(o L'e avalie em veraeiro o' *also QL'em em Pytho! poe ser L'ase
L'alL'er coisaR% ;'alL'er eleme!to para o L'al a e8press(o e *iltragem < veraeira ser i!cl'"o !o
mapeame!to% 7oos os emais ser(o ig!oraos, !(o se!o passaos para a e8press(o e mapeame!to
e *ica!o *ora a lista e sa"a%
*+a"ple 1.15. IntroduMindo filtrage" de listas
777 (i R ";.;, ;m+i(,*im;, ;6oo;, ;&;, ;c;, ;&;, ;1;, ;1;)
777 "e(em 6o* e(em in (i i6 (en(e(em! 7 1)
"4m+i(,*im4, 46oo4)
777 "e(em 6o* e(em in (i i6 e(em @R ;&;)
"4.4, 4m+i(,*im4, 46oo4, 4c4, 414, 414)
777 "e(em 6o* e(em in (i i6 (i.co3nt(e(em! RR 1)
"4.4, 4m+i(,*im4, 46oo4, 4c4)
: e8press(o e mapeame!to aL'i < simples Qape!as retor!a o valor e caa eleme!toR, porta!to se
co!ce!tre !a e8press(o e *iltragem% d meia em L'e o Pytho! itera pelos eleme!tos a lista,
passa caa eleme!to por 'ma e8press(o e *iltragem% 2e a e8press(o e *iltragem *or veraeira, o
eleme!to < mapeao e o res'ltao a e8press(o e mapeame!to < i!cl'"o !a lista retor!aa% :L'i
estamos *iltra!o *ora toas as stri!gs e 'm caracter, e *orma L'e sH sobram 'ma lista com as
stri!gs mais lo!gas%
:L'i estamos *iltra!o *ora 'm valor espec"*ico, &% ,ote L'e isso *iltra toas as ocorr=!cias e &,
'ma ve) L'e caa ve) L'e ele aparece, a e8press(o se tor!a veraeira%
co3nt < 'm m<too e lista L'e retor!a o !Kmero e ve)es L'e 'm valor ocorre em 'ma lista%
1oc= poe pe!sar L'e esse *iltro elimi!aria as 'plicatas a lista, retor!a!o 'ma lista co!te!o
ape!as 'ma cHpia e caa valor a lista origi!al% Mas !(o < o caso, porL'e valores L'e aparecem
'as ve)es !a lista origi!al Q!esse caso, & e 1R s(o e8cl'"os completame!te% E *ormas e
elimi!ar valores 'plicaos em 'ma lista, mas !(o com *iltragem%
*+a"ple 1.17. Diltrando u"a lista e" apihelper.py
metho19ist R "metho1 6o* metho1 in 1i*(o&Tect! i6 c.((.&(e(,et.tt*(o&Tect,
metho1!!)
5sso parece complicao, e < complicao, mas a estr't'ra bsica < a mesma% : e8press(o e *iltragem
toa retor!a 'ma lista, L'e < atrib'"a N varivel metho19ist% : primeira metae a e8press(o < o
mapeame!to e lista% : e8press(o e mapeame!to < 'ma e8press(o ie!tiae# retor!a o valor e
caa eleme!to% 1i*(o&Tect! retor!a 'ma lista os m<toos e atrib'tos e o&Tect4 essa < a lista
L'e estamos mapea!o% Porta!to a K!ica parte !ova < a e8press(o e *iltragem apHs o i6%
: e8press(o e *iltragem parece ass'staora, mas !(o <% 1oc= & apre!e' sobre c.((.&(e,
,et.tt* e in% Como vimos !a seI(o a!terior, a e8press(o ,et.tt*(o&Tect, metho1!
retor!a 'm ob&eto *'!I(o se o&Tect *or 'm mH'lo e metho1 o !ome e 'ma *'!I(o o mH'lo%
Porta!to essa e8press(o aceita 'm ob&eto Qchamao o&TectR% E!t(o pega 'ma lista os !omes os
atrib'tos o ob&eto, m<toos, *'!IJes e alg'mas coisas mais% E!t(o *iltra a lista para remover t'o L'e
!(o !os importa% .a)emos isso toma!o o !ome e caa atrib'to$m<too$*'!I(o e pega!o 'ma
re*er=!cia ao ob&eto real eL'ivale!te com o 'so e ,et.tt*% E!t(o veri*icamos se o ob&eto <
chamvel, o L'e i!cl'i L'aisL'er m<toos e *'!IJes, se&am emb'tios Qcomo o m<too +o+ em 'ma
listaR o' e*i!ios pelo 's'rio Qcomo a *'!I(o &3i(1%onnection$t*in, o mH'lo
o1&che(+e*R% ,(o !os importamos com o'tros atrib'tos, como PPn.mePP, L'e *a) parte e toos
os mH'los%
,eitura reco"endada
Python Tutorial isc'te o'tra *orma e *iltrar listas 'sa!o a *'!I(o emb'tia 6i(te* %
1.:. ) natureMa peculiar de and e or
Em Pytho!, .n1 e o* reali)am lHgica boolea!a a ma!eira como voc= esperaria, mas !(o retor!am
valores boolea!os# eles retor!am 'm os valores L'e est(o compara!o%
*+a"ple 1.1:. )presentando and
777 4.4 .n1 4&4
4&4
777 44 .n1 4&4
44
777 4.4 .n1 4&4 .n1 4c4
4c4
;'a!o 'samos .n1, os valores s(o avaliaos em 'm co!te8o boolea!o a esL'era para a ireita%
0, 44, "), (!, UW e None s(o *alsos em 'm co!te8o boolea!o4 t'o mais < veraeiro%
[C\
2e
toos os valores *orem veraeiros em 'm co!te8to boolea!o, .n1 retor!a o Kltimo valor% ,esse
caso, .n1 avalia 4.4, L'e < veraeiro, e!t(o 4&4, L'e < veraeiro, e retor!a 4&4%
2e L'alL'er valor *or *also em 'm co!te8to boolea!o, .n1 retor!a o primeiro valor *also% ,esse
caso 44 < o primeiro valor *also%%
7oos os valores s(o veraeiros, porta!to .n1 retor!a o Kltimo valor, 4c4%
*+a"ple 1.1=. )presentando or
777 4.4 o* 4&4
4.4
777 44 o* 4&4
4&4
777 44 o* ") o* UW
UW
777 1e6 si1e6x(!
... +*int ;in si1e6x(!;
... *et3*n 1
777 4.4 o* si1e6x(!
4.4
;'a!o 'samos o*, valores s(o avaliaos em 'm co!te8to boolea!o a esL'era para a ireita,
como com .n1% 2e alg'm valor *or veraeiro, o* retor!a esse valor imeiatame!te% ,esse caso,
4.4 < o primeiro valor veraeiro%
o* avalia 44, L'e < *also, e!t(o 4&4, L'e < veraeiro, e retor!a 4&4%
2e toos os valores *orem *alsos, o* retor!a o Kltimo valor% o* avalia 44, L'e < *also, e!t(o "),
L'e < *also, e!t(o UW, 3L'e < *also, e retor!a UW%
,ote L'e o* avalia valores ape!as at< achar alg'm L'e se&a veraeiro em 'm co!te8to boolea!o,
e ig!ora o resto% Essa isti!I(o < importa!te se alg'!s valores t=m e*eitos colaterais% :L'i, a
*'!I(o si1e6x !'!ca < chamaa, porL'e o* avalia 4.4, L'e < veraeiro, e retor!a 4.4
imeiatame!te%
2e voc= *or 'm programaor C, certame!te co!hece a e8press(o bool N . &, L'e avalia em .
se bool *or veraeiro, e & caso co!trrio% +raIas N *orma como .n1 e o* *'!cio!am em Pytho!,
voc= poe *a)er a mesma coisa%
*+a"ple 1.1@. )presentando o truGue and-or
777 . R ;6i*st;
777 & R ;secon1;
777 1 .n1 . o* &
46i*st4
777 0 .n1 . o* &
4secon14
7his sy!ta8 looks similar to the bool N . & e8pressio! i! C% 7he e!tire e8pressio! is
eval'ate *rom le*t to right, so the .n1 is eval'ate *irst% 1 .n1 46i*st4 eval'tes to
46i*st4, the! 46i*st4 o* 4secon14 eval'tes to 46i*st4%
0 .n1 46i*st4 eval'tes to 0, the! 0 o* 4secon14 eval'ates to 4secon14%
Eo3ever, si!ce this Pytho! e8pressio! is simply boolea! logic, a! !ot a special co!str'ct o* the
la!g'age, there is o!e very, very, very importa!t i**ere!ce bet3ee! this .n1-o* trick i! Pytho! a!
the bool N . & sy!ta8 i! C% 5* the val'e o* . is *alse, the e8pressio! 3ill !ot 3ork as yo'
3o'l e8pect it to% QCa! yo' tell 5 3as bitte! by this> More tha! o!ce>R
*+a"ple 1.19. #hen the and-or tricO fails
777 . R ;;
777 & R ;secon1;
777 1 .n1 . o* &
4secon14
2i!ce . is a! empty stri!g, 3hich Pytho! co!siers *alse i! a boolea! co!te8t, 1 .n1 44
eval'tes to 44, the! 44 o* 4secon14 eval'tes to 4secon14% OopsM 7hates !ot 3hat 3e
3a!te%
7he .n1-o* trick, bool .n1 . o* &, 3ill !ot 3ork like the C e8pressio! bool N .
& 3he! . is *alse i! a boolea! co!te8t%
7he real trick behi! the .n1-o* trick, the!, is to make s're that the val'e o* . is !ever *alse% O!e
commo! 3ay o* oi!g this is to t'r! . i!to ".) a! & i!to "&), the! taki!g the *irst eleme!t o* the
ret'r!e list, 3hich 3ill be either . or &%
*+a"ple 1.!6. /sing the and-or tricO safely
777 . R ;;
777 & R ;secon1;
777 (1 .n1 ".) o* "&)!"0)
44
2i!ce ".) is a !o!6empty list, it is !ever *alse% Eve! i* . is 0 or 44 or some other *alse val'e, the
list ".) is tr'e beca'se it has o!e eleme!t%
9y !o3, this trick may seem like more tro'ble tha! ites 3orth% fo' co'l, a*ter all, accomplish the
same thi!g 3ith a! i6 stateme!t, so 3hy go thro'gh all this *'ss> ?ell, i! ma!y cases, yo' are
choosi!g bet3ee! t3o co!sta!t val'es, so yo' ca! 'se the simpler sy!ta8 a! !ot 3orry, beca'se yo'
k!o3 that the . val'e 3ill al3ays be tr'e% :! eve! i* yo' have to 'se the more complicate sa*e
*orm, there are goo reaso!s to o so4 there are some cases i! Pytho! 3here i6 stateme!ts are !ot
allo3e, like (.m&1. *'!ctio!s%
Durther reading
Pytho! Cookbook isc'sses alter!atives to the .n1-o* trick %
Dootnotes
[C\
bem, L'ase t'o% Por par(o, i!stV!cias e classes s(o veraeiras em 'm co!te8to boolea!o, mas <
poss"vel e*i!ir m<toos especiais em s'a classe para *a)er com L'e avaliem *also% 1amos apre!er
t'o sobre classes e m<toos especiais !o cap"t'lo 3%

Você também pode gostar