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%