Você está na página 1de 182

ndice

Prefcio
Int roduo
Inst alao
Primeiros Passos
Fundament os
Operadores e Expresses
Cont role de Fluxo
Funes
Mdulos
Est rut uras de Dados
Resoluo de Problemas
Programao Orient ada a Objet os
Ent rada e Sa da
Bibliot eca Padro
Mais
Em Seguida
Apndice: FLOSS
Apndice: Sobre
Apndice: Hist rico de Revises
Sobre a Traduo
Prefcio
Pyt hon provavelment e uma das poucas linguagens de programao que so ao mesmo
t empo simples e poderosas. Isso bom t ant o para iniciant es quant o para programadores
avanados e, mais import ant e, divert ida de programar. Est e livro visa ajud-lo a aprender
essa linguagem maravilhosa e most rar como fazer as coisas de modo rpido e indolor - de fat o
'O Ant dot o Perfeit o para seus problemas de programao'.
Contedo

1 A Quem Se Dest ina Est e Livro
2 Lio de Hist ria
3 St at us do Livro
4 Sit e Oficial
5 Licena
6 Feedback
7 Algo Para Pensar
A Quem Se Destina Este Livro
Est e livro serve como guia ou t ut orial da linguagem de programao Pyt hon. Ele dest inado
principalment e a iniciant es, mas t ambm t il para programadores experient es.
O objet ivo que, se t udo o que voc sabe sobre comput adores como salvar arquivos de
t ext o, ent o voc possa t ambm aprender Pyt hon com est e livro.
Se voc t em experincia prvia com programao, pode se int eressar pelas diferenas ent re
Pyt hon e sua linguagem de programao favorit a - coloquei em dest aque muit as delas. No
ent ant o, uma pequena advert ncia: logo Pyt hon vai se t ornar sua linguagem de programao
favorit a!
Lio de Histria
Primeirament e, eu iniciei no Pyt hon quando eu precisei escrever um inst alador para um
programa que eu escrevi chamado 'Diamond', para que eu pudesse inst al-lo facilment e. Eu
t ive que escolher ent re as referncias Pyt hon e Perl para a bibliot eca Qt . Eu fiz algumas
pesquisas na int ernet e encont rei um art igo onde Eric S. Raymond, um hacker famoso e
respeit ado, falou como o Pyt hon t ornou-se sua linguagem de programao favorit a. Eu
t ambm descobri que as referncias PyQt eram mais maduras quando coparadas s Perl-Qt .
Assim, eu decidi que o Pyt hon era a melhor linguagem para mim.
Logo, eu comecei a pesquisar por um bom livro sobre Pyt hon. Eu no consegui encont rar
nenhum! Eu achei alguns livros da O'Reilly, mas eles ou eram muit o caros ou pareciam mais
com um manual de referncia do que com um guia. Assim, eu opt ei pela document ao que
vinha com o Pyt hon. Ent ret ant o, ela era muit o breve e pequena. Eu t ive uma boa noo sobre
o Pyt hon, mas no era complet a. Eu me sa bem, pois eu t inha uma experincia prvia em
programao, mas a document ao era inadequada para novat os.
Cerca de seis meses aps a minha primeira lut a com o Pyt hon, eu inst alei a (at ent o) lt ima
dist ribuio Linux, Red Hat 9.0, e eu est ava aprendendo ent usiasmado o KWord. Eu o adorei e
imediat ament e t ive a idia de escrever alguma coisa em Pyt hon. Eu comecei escrevendo umas
poucas pginas, mas elas t ornaram-se rapidament e um document o de 30 pginas. Ent o, eu
t ornei sria a idia de t ransform-lo em algo mais t il na forma de um livro. Aps uma "grande
quant idade" de reescrit as, o livro at ingiu um est gio onde ele se t ornou um guia t il de
aprendizado da linguagem Pyt hon. Eu considero que est e livro minha cont ribuio e meu
t ribut o comunidade do cdigo font e abert o.
Est e livro comeou a part ir das minhas not as pessoais em Pyt hon e eu ainda o considero da
mesma maneira, embora eu t enha consumido muit o esforo para t orn-lo mais agradvel aos
out ros. :)
No esp rit o verdadeiro do cdigo font e abert o, eu recebi muit as sugest es const rut ivas,
cr t icas e coment rios de leit ores ent usiast as que me ajudaram muit o a melhorar est e livro.
Status do Livro
As mudanas desde a lt ima grande reviso de Maro de 2005 so referent es at ualizao
para o lanament o do Pyt hon 3.0 (esperado para Agost o/Set embro de 2008). Uma vez que a
linguagem Pyt hon 3.0 em si ainda no foi finalizada/disponibilizada, est e livro est ar passando
por const ant es mudanas. No ent ant o, de acordo com o esp rit o da filosofia open source do
"Release Early, Release Oft en" (ent regar cedo e com freqncia), o livro at ualizado foi lanado
e est sendo at ualizado const ant ement e.
O livro precisa da ajuda de leit ores como vocs para apont ar quaisquer part es do livro que no
est ejam boas, incompreens veis ou simplesment e erradas. Por favor, escreva para o aut or
principal ou para os respect ivos t radut ores com seus coment rios e sugest es.
um esforo const ant e equilibrar est e livro ent re as necessidades dos iniciant es e a
t endncia no sent ido de complet ude da informao. Seria t il se os leit ores t ambm dessem
sua opiniao sobre o quant o est e livro deve se aprofundar.
Site Oficial
O sit e oficial do livro ht t p://www.swaroopch.com/not es/Pyt hon . No sit e voc pode ler o livro
na nt egra ou pode baixar as suas lt imas verses e t ambm me enviar sua opinio.
Licena

1. Est e livro licenciado sob a licena Creat ive Commons At t ribut ion-Noncommercial-Share
Alike 3.0 Unport ed.
Ist o significa que:
Voc livre para Compart ilhar, ist o , dist ribuir e t ransmit ir est e livro.
Voc livre para Remixar, ist o , adapt ar est e livro.
Sob as seguint e condies:
At ribuio. Voc deve at ribuir o t rabalho da maneira especificada pelo aut or
ou licenciador (mas no de forma a sugerir que eles endossam voc ou o uso
que fizer dest e livro).
Uso no comercial. Voc no pode usar est e livro para fins comerciais.
Compart ilhament o pela mesma Licena. Se voc alt erar t ransformar ou se
basear nest e t rabalho, voc s pode dist ribuir a obra result ant e por est a
mesma licena.
Para qualquer reuso ou dist ribuio, os t ermos de licena dest e livro devem est ar
claros.
Qualquer uma das condies acima pode ser desconsiderada caso voc obt enha a
permisso do det ent or dos direit os.
Nada nest a licena limit a ou rest ringe os direit os morais do aut or.
2. A at ribuio deve ser exibida at ravs de link para
ht t p://www.swaroopch.com/not es/Pyt hon e a indicao clara de que o t ext o original pode
ser obt ido nest e local.
3. Todo o cdigo/script s fornecidos nest e livro est o licenciados sob a 3-clause BSD
License, a menos que indicado de out ro modo.
4. Cont ribuies volunt rias para est e livro original devem est ar sob est a mesma licena e o
copyright deve ser at ribu do para o aut or principal dest e livro.
Feedback
Coloquei um bocado de esforo para fazer est e livro o mais int eressant e e preciso quant o foi
poss vel. No ent ant o, caso voc ache que alguma part e do mat erial est eja inconsist ent e,
incorret a ou simplesment e precise melhorar, ent o por favor me informe, para que eu possa
fazer as melhorias cab veis. Voc pode me cont act ar at ravs da minha pgina de usurio.
Algo Para Pensar
Exist em duas maneiras de const ruir um projet o de soft ware: uma faz-lo t o simples a
pont o de que, obviament e, no haja deficincias; a out ra faz-lo t o complicado de
modo que no haja deficincias bvias.
-- C. A. R. Hoare
Sucesso na vida menos uma quest o de t alent o e oport unidade quant o de
concent rao e perseverana.
-- C. W. Wendt e
Introduo
Contedo

1 Int roduo
2 Caract er st icas de Pyt hon
3 Por que no Perl?
4 Por que no Ruby?
5 O Que Os Programadores Dizem
6 Sobre Pyt hon 3.0
Introduo
Pyt hon uma dessas raras linguagens em que se pode alegar ser ao mesmo t empo simples e
poderosa. Voc vai se surpreender ao descobrir o quant o fcil se concent rar na soluo
para o problema em vez da sint axe e est rut ura da linguagem que voc est programando.
A int roduo oficial para Pyt hon :
Pyt hon uma poderosa linguagem de programao fcil de aprender. Possui eficient es
est rut uras de dados de alt o-n vel e uma simples e efet iva abordagem para programao
orient ada a objet os. A elegant e sint axe e a t ipagem dinmica de Pyt hon, aliada a sua
nat ureza int erpret ada, faz dela uma linguagem ideal para criar scripts e desenvolver
aplicaes de modo gil em diversas reas e na maioria das plat aformas.
Vou det alhar a maioria dessas caract er st icas na prxima seo.
Not a
Guido van Rossum, criador da linguagem Pyt hon, cujo nome foi baseado na srie "Mont y
Pyt hon's Flying Circus" da BBC. Ele, part icularment e, no gost a de cobras que para se
aliment ar, esmagam out ros animais usando seu ext enso corpo.
Caractersticas de Python
Simples
Pyt hon uma linguagem simples e minimalist a. Ler um bom programa em Pyt hon quase
como ler em ingls, ainda que seja um ingls bem rest rit o. Est e cart er de pseudo-cdigo
do Pyt hon um de seus maiores pont os fort es. Ele permit e que voc se concent re na
soluo do problema e no na linguagem em si.
Fcil de Aprender
Como voc ver, ext remament e fcil iniciar-se em Pyt hon. A linguagem possui uma
sint axe ext raordinariament e simples, como j mencionado.
Livre e de Cdigo Abert o
Pyt hon um exemplo de FLOSS (Free/Libre and Open Source Soft ware). Traduzindo,
voc pode dist ribuir livrement e cpias dest e soft ware, ler seu cdigo-font e, modific-lo,
usar t rechos em novos programas livres e t udo o que voc quiser fazer. FLOSS baseado
no conceit o de uma comunidade que compart ilha conheciment o. Est e um dos mot ivos
pelos quais Pyt hon t o bom - ele vem sendo criado e const ant ement e melhorado por
uma comunidade que simplesment e quer ver a Pyt hon cada vez melhor.
Linguagem de Alt o N vel
Quando voc escreve programas em Pyt hon, no h necessidade de se preocupar com
det alhes de baixo n vel t ais como manipular a memria ut ilizada pelo programa, et c.
Port vel
Por ser uma linguagem de cdigo abert o, Pyt hon foi port ada (ou seja, modificada para
funcionar) em muit as plat aformas. Todos os seus programas em Pyt hon podem rodar em
qualquer uma dest as plat aformas sem precisar de mudanas, desde que voc seja
cuidadoso o suficient e para evit ar usar caract er st icas que dependam do sist ema.
Voc pode usar Pyt hon em Linux, Windows, FreeBSD, Macint osh, Solaris, OS/2, Amiga,
AROS, AS/$)), BeOS, OS/390, z/OS, Palm OS, QNX, VMS, Psion, Acorn RISC OS, VxWorks,
PlaySt at ion, Sharp Zaurus, Windows CE e at mesmo no Pocket PC!
Int erpret ada
Ist o requer uma pequena explicao
Um programa escrit o em uma linguagem compilada como C ou C++ convert ido da
linguagem de origem (C ou C++) para a linguagem que falada por seu comput ador
(cdigo binrio, ou seja, 0s e 1s) usando um compilador com vrios flags e opes. Quando
voc roda o programa, o soft ware linkedit or/carregador copia o programa do disco r gido
para a memria e comea a execut -lo.
Pyt hon, por sua vez, no necessit a de compilao para cdigo binrio. Voc simplement e
execut a o programa diret ament e do cdigo-font e. Int ernament e, Pyt hon convert e o
cdigo-font e em um format o int ermedirio chamado byt ecode, o t raduz para a linguagem
nat iva do seu comput ador e ent o o execut a. Tudo isso, na verdade, t orna Pyt hon muit o
mais fcil, uma vez que voc no precisa se preocupar com a compilao do programa,
cert ificar-se que as bibliot ecas necessrias est o t odas linkedit adas e carregadas et c,
et c. Ist o t ambm t orna seus programas em Pyt hon muit o mais port veis, j que voc pode
simplesment e copiar seu programa em Pyt hon em out ro comput ador e execut -lo!
Orient ada a Objet os
Pyt hon suport a t ant o programao procedural (est rut urada) quant o orient ada a objet os.
Em linguagens procedurais, o programa const ru do com base em procediment os e
funes, que nada mais so que t rechos reut ilizveis de programas. Em linguagens
orient adas a objet o, com base em objet os que combinam dados e funcionalidade. Pyt hon
t em uma maneira simples mas poderosa de implement ar programao orient ada a
objet os, especialment e quando comparada a linguagens como C++ ou Java.
Ext ens vel
Se voc precisa que um t recho cr t ico de cdigo seja execut ado com muit a rapidez ou
quer que part e de algum algorit mo no seja abert a, voc pode codific-los em C ou C++ e
ent o us-los a part ir de seu programa Pyt hon.
Embarcvel
Voc pode embarcar Pyht on em seus programas C/C++ para fornecer funcionalidades de
script ing aos usurios dos programas.
Bibliot ecas Ext ensivas
A Bibliot eca Padro do Pyt hon (Pyt hon St andard Library) de fat o enorme. Ela pode
ajud-lo a fazer vrias coisas envolvendo expresses regulares, gerao de
document ao, t est es unit rios, t hreading, acesso a bancos de dados, browsers web, CGi,
FTP, e-mail, XML, XML-RPC, HTML, arquivos WAV, cript ografia, GUI (Int erfaces Grficas
com o Usurio), Tk e out ras coisas dependent es do sist ema. Lembre-se de que t udo ist o
est dispon vel onde quer que Pyt hon est eja inst alado. Est a a chamada filosofia das
"Pilhas Inclu das" do Pyt hon.
Alm da bibliot eca padro, exist em vrias out ras bibliot ecas de alt a qualidade, t ais comos
wxPyt hon , Twist ed, Pyt hon Imaging Library e muit as out ras.
Pyt hon , de fat o, uma linguagem poderosa e empolgant e. Ela possui a combinao exat a de
desempenho e caract er st icas que fazem escrever programas em Pyt hon uma t arefa fcil e
divert ida.
Por que no Perl?
Se voc ainda no conhece, Perl out ra linguagem de programao int erpret ada e de cdigo
abert o ext remament e popular.
Se voc alguma vez t ent ou escrever um programa grande em Perl, voc poderia t er
respondido essa pergunt a sozinho! Em out ras palavras, programas em Perl so fceis quando
eles so pequenos e so excelent es para pequenos "hacks" e script s "pra fazer o servio". No
ent ant o, eles se t ornam rapidament e dif ceis de mant er medida em que se t ornam maiores.
E est ou falando isso com base na minha experincia no Yahoo! escrevendo programas
grandes em Perl.
Quando comparados a Perl, os programas em Pyt hon so definit ivament e mais simples, claros,
fceis de escrever e, consequent ement e, mais leg veis e fceis de mant er. Eu admiro Perl e
uso diariament e para vrias t arefas, mas t oda vez que escrevo um programa, comeo a
pensar em t ermos de Pyt hon, porque se t ornou nat ural para mim. Perl passou por t ant os hacks
e mudanas que parece que a linguagem t oda um grande (mas t imo) hack. Infelizment e, o
fut uro Perl 6 no parece t razer nenhuma melhoria quant o a isso.
A nica e bast ant e significat iva vant agem do Perl, na minha opinio, sua enorme bibliot eca
CPAN (Comprehensive Perl Archive Net work). Como o nome sugere, uma imensa coleo de
mdulos Perl e simplesment e inacredit vel, por causa de seu t amanho e profundidade - voc
pode fazer prat icament e qualquer coisa que seja poss vel de se fazer com um comput ador
usando est es mdulos. Uma das razes pelas quais Perl t em mais bibliot ecas que Pyt hon o
fat o de exist ir h muit o mais t empo. No ent ant o, ist o parece est ar mudando com o
cresciment o do Pyt hon Package Index.
Por que no Ruby?
Se voc ainda no sabia, Ruby uma out ra popular linguagem de programao de cdigo
abert o.
Se voc j gost a e usa Ruby, ent o eu definit ivament e recomendo que cont inue a us-la.
Para as out ras pessoas que ainda no a usaram e est o t ent ando escolher ent re aprender
Pyt hon ou aprender Ruby, ent o eu recomendaria Pyt hon, unicament e pela perspect iva de
facilidade de aprendizado. Pessoalment e, achei dif cil compreender a linguagem Ruby, mas
t odas as pessoas que conseguem aprovam a beleza da linguagem. Infelizment e no t ive t ant a
sort e.
O Que Os Programadores Dizem
int eressant e ler o que grandes hackers como ESR t m a dizer sobre Pyt hon:

Eric S. Raymond o aut or de 'A Cat edral e o Bazar' e t ambm o indiv duo que
cunhou o t ermo 'Open Source'. Ele diz que Pyt hon se t ornou sua linguagem de
programao favorit a. Est e art igo foi a real inspirao para meu primeiro cont at o com
Pyt hon.

Bruce Eckel o aut or dos famosos livros 'Thinking in Java' e 'Thinking in C++'. Ele diz
que nenhuma out ra linguagem o deixou t o produt ivo quant o Pyt hon. Diz ainda que
Pyt hon t alvez a nica linguagem que se concent ra em t ornar as coisas mais fceis
para o programador. Leia a ent revist a complet a para mais det alhes.

Pet er Norvig o conhecido aut or do Lisp e Diret or de Qualidade de Busca no google
(obrigado a Guido van Rossum por avisar). Ele diz que Pyt hon sempre foi part e
int egrant e do Google. Est a afirmao pode ser comprovada verificando a pgina do
Google Jobs que list a conheciment o em Pyt hon como requisit o para os engenheiros de
soft ware.
Sobre Python 3.0
Pyt hon 3.0 a nova verso da linguagem que ser lanada em breve. Tambm conhecida
como Pyt hon 3000 ou Py3k.
A mot ivao principal para uma nova verso de Pyt hon remover t odos os pequenos
problemas e det alhes que foram se acumulando no decorrer dos anos e t ornar a linguagem
ainda mais limpa.
Se voc j t em muit o cdigo Pyt hon 2.x, ent o exist e um ut ilit rio para ajudar na converso de
cdigo 2.x para 3.x.
Mais det alhes em:

Int roduo por Guido van Rossum
O que h de novo no Pyt hon 2.6 (recursos significat ivament e diferent es das verses
ant eriores de Pyt hon 2.x e que provavelment e sero inclu dos no Pyt hon 3.0)
O que h de novo no Pyt hon 3.0
Cronograma de lanament o do Pyt hon 2.6 e 3.0
Pyt hon 3000 (a list a oficial de mudanas propost as)
Planos diversos para Pyt hon 3.0
Novidades do Pyt hon (list a det alhada das mudanas)
Instalao
Se voc j t em o Pyt hon 2.x inst alado, no preciso remov-lo para inst alar o Pyt hon 3.0. Voc
pode mant er ambos inst alados ao mesmo t empo.
Contedo

1 Para usurios Linux e BSD
2 Para usurios Windows
2.1 Prompt do DOS
3 Para usurios MAC OS X
4 Sumrio
Para usurios Linux e BSD
Se voc est usando uma dist ribuio Linux como Ubunt u, Fedora, OpenSUSE ou {coloque
sua escolha aqu } , ou um sist ema BSD t al como FreeBSD, ent o provvel que voc j t enha
o Pyt hon inst alado em seu sist ema.
Para t est ar se o Pyt hon j est inst alado em seu Linux, abra um shell (como konsole ou gnome-
terminal) e ent o ent re com o comando python -V como most rado abaixo:
$ python -V
Python 3.0b1
Not a
$ o prompt do shell. Ele ser diferent e para voc dependendo das configuraes do seu
sist ema operacional, port ant o eu indicarei o prompt apenas pelo s mbolo $.
Se voc v alguma informao sobre a verso, como most rado acima, ent o o Pyt hon j est
inst alado.
Cont udo, se voc obt er uma mensagem como est a:
$ python -V
bash: Python: command not found
Ent o o Pyt hon no est inst alado. Ist o alt ament e improvvel, mas poss vel.
Nest e caso, voc t em dois meios para inst alar o Pyt hon em seu sist ema:

Voc pode compilar o cdigo font e do Pyt hon e ent o inst al-lo. As inst rues para a
compilao so informadas no websit e do Pyt hon.
Inst alar os pacot es binrios usando um gerenciador de pacot es que vem com o seu
sist ema operacional, t al como apt-get no Ubunt u/Debian e out ros Linux baseados em
Debian, yum no Fedora, pkg_add no FreeBSD, et c. Voc precisar de uma conexo com a
int ernet para usar est e mt odo. Uma alt ernat iva baixar os binrios de algum out ro lugar
e ent o copi-los e inst al-los em seu PC. [Est a opo est ar dispon vel aps o
lanament o final do Pyt hon 3.0]
Para usurios Windows
Visit e o sit e ht t p://www.pyt hon.org/download/releases/3.0/ e baixe a lt ima verso, que era a
verso 3.0 bet a 1, quando est e livro foi escrit o. Ele t em apenas 12.8 MB, o que bem
compact o quando comparado com a maioria das out ras linguagens ou programas.
Cuidado
Quando for dada a opo para voc desmarcar component es opcionais, no desmaque
nenhum! Alguns dest es component es podesm ser t eis para voc, especialment e IDLE.
Um fat o int eressant e que usurios Windows so os que mais baixam os arquivos do Pyt hon.
claro que isso no fornece uma viso geral, uma vez que quase t odos os usurios Linux j
t m o Pyt hon inst alado por padro em seus sist ema.
Prompt do DOS
Se voc quer ser capaz de usar o Pyt hon da linha de comando do Windows, i.e. o prompt do
DOS, ent o voc precisa configurar a varivel PATH corret ament e.
Pra usurios Windows 2000, XP ou 2003, clique em Painel de Controle -> Sistema ->
Avanado -> Variveis de ambiente. Clique na varivel chamada PATH na seo 'Variveis de
Sist ema', ent o selecione Editar e adicione ;C:\Pyt hon30 no fim do que j est iver l. claro
que voc deve usar o diret rio corret o onde voc inst alou o Pyt hon.
Para verses ant igas do Windows, adicione as seguint es linhas no arquivo C:\AUTOEXEC.BAT :
'PATH=%PATH%;C:\Python30' (sem as aspas) e reinicie o sist ema. Em Windows NT use o
arquivo AUTOEXEC.NT.
Para usurios MAC OS X
Usurios Mac OS X j encont raro o Pyt hon inst alado em seu sist ema. Abra o Terminal.app e
rode python - V, e siga os conselhos da seo para usurios Linux.
Sumrio
Em um sist ema Linux, provvel que voc j t enha o Pyt hon inst alado. Caso cont rrio, voc
pode inst al-lo usando o gerenciador de pacot es que vem com sua dist ribuio. Em um
sist ema Windows, inst alar o Pyt hon t o fcil como baixar o inst alador e clicar duas vezes
sobre ele. Daqui para frent e ns assumiremos que voc j est com o Pyt hon inst alado em seu
sist ema.
A seguir ns escreveremos nosso primeiro programa em Pyt hon.
Primeiros Passos
Contedo

1 Int roduo
2 Usando o Prompt do Int erpret ador
3 Escolhendo um Edit or
4 Usando um Arquivo Font e
4.1 Como ele Funciona
4.2 Programas Execut veis em Pyt hon
5 Obt endo Ajuda
6 Sumrio
Introduo
Ns veremos agora como rodar o t radicional programa 'Ol Mundo' em Pyt hon. Ist o ensinar a
voc como escrever, salvar e rodar programas no Pyt hon.
H duas formas de usar o Pyt hon para rodar um programa - usando o prompt do int erpret ador
int erat ivo ou usando um arquivo font e. Ns veremos como usar os dois mt odos.
Usando o Prompt do Interpretador
Inicie o int erpret ador na linha de comando digit ando python prompt do shell.
Em sist emas Windows, voc pode rodar o int erpret ador na linha de comando se a varivel PATH
est iver corret ament e configurada.
Se voc est usando o IDLE, clique em Iniciar Programas Python 3.0 IDLE (Python
GUI).
Agora digit e print('Ol Mundo') e em seguida pressione a t ecla Enter. Voc ver as palavras
Ol Mundo como sa da.
$ python
Python 3.0b2 (r30b2:65106, Jul 18 2008, 18:44:17) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print('Ol Mundo')
Ol Mundo
>>>
Perceba que o Pyt hon most ra a sa da da linha imediat ament e! O que voc acabou de digit ar
uma simples instruo. Ns usamos print para imprimir qualquer valor que voc fornea. Aqui,
ns est amos fornecendo o t ext o Ol Mundo e est e imediat ament e impresso na t ela.
Como Sair do Int erpret ador
Para sair do prompt , pressione ctrl-d se voc est usando o IDLE ou o shell do Linux/BSD.
No caso do prompt de comando do Windows, pressione ctrl-z seguido da t ecla enter.
Escolhendo um Editor
Ant es de comearmos a escrever programas em arquivos font e, ns precisamos de um edit or
para escrever est es arquivos. A escolha de um edit or crucial. Voc deve escolher o edit or
como se voc fosse escolher um carro novo. Um bom edit or o ajudar a escrever programas
para Pyt hon facilment e, fazendo sua jornada mais confort vel e t e ajudando a chegar em seu
dest ino (at ingindo seu objet ivo) de uma forma fcil e segura.
Uma das necessidades mais bsicas o dest aque de sint axe que t orna colorida t odas as
diferent es part es de seu programa, de forma que voc possa ver seu programa e visualizar
seu funcionament o.
Se voc est usando o Windows, eu sugiro que voc use o IDLE. O IDLE dest aca a sint axe e
permit e que voc rode seus programas dent ro dele mesmo, alm de fazer out ras coisas. Uma
observao especial: No use o Not epad - uma m escolha pois ele no dest aca a sint axe
e t ambm no t em suport e a indent ao do t ext o, que muit o import ant e no nosso caso,
como veremos adiant e. Bons edit ores t ais como o IDLE (e t ambm o VIM) aut omat icament e o
ajudaro a fazer isso.
Se voc est usando Linux/FreeBSD, ent o voc t em diversas escolhas para um edit or. Se
voc um programador experient e, ent o voc j deve est ar usando Vim ou Emacs.
desnecessrio dizer que est es so dois dos mais poderosos edit ores e que voc ser
beneficiado por us-los para escrever seus programas em Pyt hon. Eu pessoalment e uso Vim
para a maioria de meus programas. Se voc um programador iniciant e, voc pode usar o
Kate, que um dos meus favorit os. No caso de voc t er t empo para aprender Vim ou Emacs,
ent o eu realment e recomendo que voc aprenda a usar um deles, pois ser de grande
ut ilidade para voc em sua longa jornada.
Nest e livro, ns usaremos o IDLE, nosso IDE (Integrated Development Environment - Ambient e
Int egrado de Desenvolviment o) como edit or. O IDLE inst alado por padro com os
inst aladores Pyt hon para Windows e Mac OS X. Ele t ambm est dispon vel para inst alao
em Linux e BSDs nos seus respect ivos reposit rios.
Ns exploraremos como usar o IDLE na prxima seo. Para mais det alhes, por favor veja a
document ao do IDLE.
Se voc ainda deseja explorar out ras escolhas para um edit or, veja a ampla list a de edit ores
para Pyt hon e faa sua escolha. Voc t ambm pode escolher um IDE para Pyt hon. Veja a
ampla list a de IDEs que suport am Pyt hon para mais det alhes. Uma vez que voc passe a
escrever grandes programas em Pyt hon, IDEs podem ser muit o t eis.
Eu repit o novament e, por favor escolha um edit or apropriado - ele pode fazer a elaborao de
programas em Pyt hon mais fcil e divert ida.
Para usurios do Vim
H uma boa int roduo sobre como t ornar o Vim um poderoso IDE para Pyt hon por John
M Anderson.
Para usurios do Emacs
H uma boa int roduo sobre como t ornar o Emacs um poderoso IDE para Pyt hon por
Ryan McGuire.
Usando um Arquivo Fonte
Agora vamos volt ar a programao. H uma t radio de que quando voc aprende uma nova
linguagem de programao, o primeiro programa que voc escreve e roda o 'Ol Mundo' -
t udo que ele faz apenas dizer 'Ol Mundo' quando voc o roda. Como Simon Cozens
[ 1]
diz,
ele uma 't radicional invocao para os deuses da programao ajudarem voc a aprender
melhor a linguagem' :) .
Inicie o edit or escolhido, digit e o seguint e programa e salve-o como olamundo.py
Se voc est usando o IDLE, clique sobre File New Window e ent o ent re com o seguint e
programa. Ent o clique sobre File Save.
#!/usr/bin/python
#Filename: olamundo.py
print('Ol Mundo')
Rode est e programa abrindo o shell (t erminal Linux ou prompt do DOS) e ent re com o
comando python olamundo.py.
Se voc est usando o IDLE, use o menu Run Run Module ou o at alho F5.
A sa da semelhant e a seguint e:
$ python olamundo.py
Ol Mundo
Se voc obt er uma sa da como acima, parabns! - voc rodou com sucesso seu primeiro
programa para Pyt hon.
No caso de um erro, pro favor digit e o programa acima exatamente como most rado e rode o
programa novament e. Not e que Pyt hon case-sensit ive i.e. print no o mesmo que Print -
not e o p minsculo na primeira inst ruo e o P maisculo na segunda. Alm disso, assegure-se
que no haja espaos ou t abulaes ant es do primeiro carct er de cada linha - ns veremos
por que isso import ant e mais t arde.
Como ele Funciona
Vamos considerar as duas primeiras linhas do programa. Elas so chamadas de comentrios -
qualquer coisa a direit a do s mbolo # um coment rio e usado principalment e como not as
para o leit or do programa.
Pyt hon no usa os coment rio, excet o para o caso especial da primeira linha. Ela chamada
de linha de organizao - sempre que os dois primeiros caract eres do arquivo font e so #!
seguidos pela localizao de um programa, ist o diz para seu sist ema Linux/Unix que est e
programa deve ser rodado com est e int erpret ador quando voc executar o programa. Ist o
explicado em det alhes na prxima seo. Not e que voc sempre pode rodar o programa em
qualquer plat aforma especificando o int erpret ador diret ament e na linha de comando, como o
comando python olamundo.py .
Import ant e
Use coment rio em seu programa de forma sensat a, para explicar algum det alhe
import ant e de seu programa - ist o t il para que os leit ores de seu programa possam
ent ender facilment e o que ele est fazendo. Lembre-se, est pessoa pode ser voc
mesmo depois de seis meses!
Os coment rio so seguidos por uma instruo de Pyt hon. Aqui ns chamamos a funo print
que apenas imprime o t ext o 'Ol Mundo'. Ns aprenderemos sobre funes em um cap t ulo
post erior, o que voc deve ent ender agora que o que voc colocar nos parnt eses ser
impresso na t ela. Nest e caso, ns fornecemos 'Ol Mundo' que se refere a uma st ring - no se
preocupe, ns vamos explorar essas t erminologias em det alhes mais t arde.
Programas Executveis em Python
Ist o funciona apenas para usurios Linux/Unix, mas usurios do Windows podem est ar
curiosos sobre a primeira linha do programa. Inicialment e, devemos dar ao programa a
permisso para execut ar usando o comando chmod e ent o rodar o programa font e.
$ chmod a+x olamundo.py
$ ./olamundo.py
Ol Mundo
O comando chmod usado aqui para mudar ('ch'ange) o modo ('mod'e) do arquivo dando
permisso para t odos ('a'll) os usurio do sist ema o execut ar (e'x'ecut e). Ent o, ns
execut amos o programa diret ament e especificando a localizao do arquivo font e. Ns
execut amos o programa diret ament e especificando a localizao do arquivo font e. Ns
usamos o ./ para indicar que o programa est no diret rio at ual.
Para t ornar as coisas mais divert idas, voc pode renomear o arquivo para olamundo e rod-lo
com ./olamundo e ele ainda funcionar, uma vez que o sist ema sabe que ele t em de rodar o
programa usando o int erpret ador cuja localizao especificada na primeira linha do arquivo
font e.
Agora voc capaz de rodar o programa desde que voc conhea o caminho exat o para o
arquivo font e - mas e se voc desejar rodar o arquivo de qualquer lugar? Voc pode fazer isso
armazenando o programa em um dos diret rios list ados na varivel de ambient e PATH. Sempre
que voc roda qualquer programa, o sist ema procura por aquele programa em cada diret rio
list ado na varivel de ambient e PATHe ent o roda aquele programa. Ns podemos t ornar est e
programa dispon vel em qualquer lugar simplesment e copiando est e arquivo font e para um
dos diret rios list ados no PATH.
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/swaroop/bin
$ cp olamundo.py /home/swaroop/bin/olamundo
$ olamundo
Ol Mundo
Ns podemos most rar a varivel PATH usando o comando echo e incluindo o prefixo $ para
indicar para o shell que ns precisamos do valor dest a varivel. Ns vemos que
/home/swaroop/bin um dos diret rios na varivel PATH onde swaroop o nome de usurio
que eu est ou usando em meu sist ema. Provavelment e exist e um diret rio similar para seu
nome de usurio para seu sist ema. Alt ernat ivament e, voc pode adicionar um diret rio de sua
escolha para a varivel PATH - ist o pode ser feit o rodando PATH=$PATH:/home/swaroop/mydir
onde '/home/swaroop/mydir' o diret rio que eu desejo adicionar na varivel PATH.
Est e mt odo muit o t il se voc deseja escrever script s t eis que voc queira rodar de
qualquer lugar, a qualquer hora. como criar seu prprio comando, semelhant e ao cd ou
qualquer out ro comando que voc use no t erminal linux ou no prompt do DOS.
Cuidado
Em Pyt hon, um programa ou um script significam a mesma coisa.
Obtendo Ajuda
Se voc precisar de informao sobre alguma funo ou inst ruo em Pyt hon, ent o voc
pode usar a funo embut ida help. Ist o muit o t il especialment e quando est iver usando o
prompt do int erpret ador. Por exemplo, rode help(print) - ist o most ra a ajuda para a funo
print que usada para imprimir coisas na t ela.
Not a
Pressione q para sair da ajuda.
De forma similar, voc pode obt er informao sobre quase qualquer coisa em Pyt hon. Use
help() para aprender mais usando o prprio help!
No caso de voc precisar de ajuda para operadores como return, ent o voc deve coloc-los
dent ro de aspas como em help('return') dessa forma Pyt hon no se confunde com o que
ns queremos fazer.
Sumrio
Agora voc capaz ou de escrever,salvar e rodar programas em Pyt hon facilment e. Agora que
voc um usurio Pyt hon, vamos aprender alguns conceit os de Pyt hon.
References:

1. O aut or do maravilhoso livro 'Beginning Perl'
Fundamentos
Imprimir 'Ol mundo' no suficient e, ou ? Voc quer fazer mais que isso - voc quer inserir
dados, manipul-los e obt er alguma respost a a part ir deles. Ns podemos conseguir isso em
Pyt hon usando const ant es e variveis.
Contedo

1 Const ant es Lit erais
2 Nmeros
3 St rings
3.1 Aspas Unit rias
3.2 Aspas Duplas
3.3 Aspas Triplas
3.4 Seqncias de Escape
3.5 St rings Brut as
3.6 St rings So Imut veis
3.7 Concat enao de Lit erais do Tipo St ring
3.8 O mt odo 'format '
4 Variveis
5 Nomenclat ura de Ident ificadores
6 Tipos de Dados
7 Objet os
7.1 Exemplo: Ut ilizando variveis e const ant es lit erais
8 Linhas Lgicas e F sicas
9 Indent ao
10 Resumo
Constantes Literais
Um exemplo de uma const ant e lit eral um nmero como 5, 1.23, 9.25e-3 ou uma st ring
(sequncia de caract eres) como 'Esta uma string' ou " uma string!". Ela denominada
lit eral porque literal - voc usa seu valor lit eralment e. O nmero 2 sempre represent a a si
mesmo e nada alm disso - ele uma constante pois seu valor no pode ser mudado. Logo,
t odos esses valores referem-se a const ant es lit erais.
Nmeros
Os nmeros em Pyt hon so so de t rs t ipos - int eiros, pont o flut uant e e complexos.

2 um exemplo de int eiro, os int eiros so os nmeros redondos.
3.23 e 52.3E-4 so exemplos de nmeros de pont o flut uant e (ou floats, para abreviar). A
not ao E indica as pot ncias de 10. Nest e caso, 52.3E-4 significa 52.3 * 10
-4
.
(-5+4j) e (2.3 - 4.6j) so exemplos de nmeros complexos.
Not a para programadores experient es
No h o t ipo 'long int ' (int eiro longo) em separado. O t ipo int eiro padro pode assumir
qualquer valor grande.
Strings
Uma st ring uma sequncia de caracteres. As st rings so basicament e um amont oado de
palavras. As palavras podem est ar em ingls ou em qualquer l ngua que seja suport ada pelo
padro Unicode, que at ende a quase t odas as l nguas do mundo.
Not a para programadores experient es
No h st rings "soment e em ASCII" porque o padro Unicode engloba o ASCII.
Por conveno, t odas as st ringas est o em UTF-8.
Eu posso garant ir que voc usar st rings em quase t odos os programas que escrever em
Pyt hon, port ant o prest e at eno prxima part e sobre como usar st rings em Pyt hon.
Aspas Unitrias
Vsoc pode especificar as st rings usando aspas unit rias (ou apst rofes) t ais como 'Use
aspas unitrias em mim'. Todos os espaos em branco, ist o , espaos e t abulaes so
preservados no est ado em que se encont ram.
Aspas Duplas
As st rings em aspas duplas t rabalham exat ament e da mesma maneira que as st rings em
aspas unit rias. Eis um exemplo: "Qual o seu nome?"
Aspas Triplas
Voc pode especificar st rings que ocupam vrias linhas usando aspas t riplas - (""" ou '''). Voc
pode usar aspas unit rias e aspas duplas livrement e para formar as aspas t riplas. Eis um
exemplo:
'''Esta uma string multi-linha. Esta a primeira linha.
Esta a segunda linha.
"Qual o seu nome?", eu perguntei.
Ele disse "Bond, James Bond."
'''
Seqncias de Escape
Suponha que voc queira obt er uma st ring que cont enha um apst rofe ('), como voc
escrever essa st ring? Por exemplo, a st ring What's your name?. Voc no pode escrever
'What's your name?' porque o Pyt hon ficar confuso sobre onde a st ring comea e onde
t ermina. Logo, voc t er que especificar que est e apst rofe no indica o fim da st ring. Isso
pode ser feit o com a ajuda do que denominada uma sequncia de escape. Voc especifica o
apst rofe como \' - not e a barra invert ida. Agora, voc pode escrever a st ring como 'What\'s
your name?'.
Uma out ra maneira de escrever essa st ring espec fica seria "What's your name?", ist o ,
usando aspas duplas. Da mesma maneira, voc pode usar uma sequncia de escape para
inserir aspas duplas em uma st ring limit ada por aspas duplas. Voc t ambm pode inserir a
prpria barra invert ida usando a seqncia de escape \\.
O que fazer se voc quer escrever uma st ring de duas linhas? Uma soluo usar uma st ring
limit ada por aspas t riplas conforme foi ensinado previament e ou voc pode ut ilizar uma
seqncia de escape para o caract er de nova linha - \n para indicar o in cio da nova linha. Eis
um exemplo, Essa a primeira linha\nEssa a segunda linha. Uma out ra seqncia de
escape t il a ser conhecida a t abulao - \t. H muit as out ras seqncias de escape, mas
eu mencionei aqui soment e as mais t eis.
import ant e observar que numa st ring, uma nica barra invert ida no fim da linha indica que a
st ring cont inua na prxima linha, mas nenhuma linha nova adicionada. Por exemplo:
"Essa a primeira frase.\
Essa a segunda frase."
equivale a "Essa a primeira frase. Essa a segunda frase.".
Strings Brutas
Se voc precisa escrever algumas st rings onde nenhum processament o especial t ais como as
seqncias de escape so manipuladas, ent o o que voc precisa escrever uma st ring bruta
prefixando um r ou um R st ring . Eis um exemplo, r"Novas linhas so indicadas por \n".
Strings So Imutveis
Isso significa que uma vez que voc t enha criado uma st ring, voc no pode mud-la. Embora
isso parea como algo ruim, no realment e. Ns veremos porque isso no uma limit ao
nos diversos programas que ns analisaremos mais adiant e.
Concatenao de Literais do Tipo String
Se voc colocar duas st rings lit erais lado a lado, elas so aut omat icament e concat enadas pelo
Pyt hon. Por exemplo, 'Qual ' 'o seu nome?' aut omat icament e convert ido em "Qual o
seu nome?".
Not a para programadores C/C++
No h t ipo de dado char (caract er) separado em Pyt hon. No exist e nenhum mot ivo real
para ist o e eu t enho cert eza que voc no esquecer ist o.
Not a para programadores Perl/PHP
Lembre-se que st rings com aspas simples e duplas so a mesma coisa - elas no diferem
ent re si
Not a para Usurios de Expresso Regular
Sempre use st rings brut as quando est iver manipulando expresses regulares. Do
cont rrio, ser necessrio muit o uso de caract eres de escape. Por exemplo, referncias a
barras invert idas podem ser feit as como '\\1' ou r'\1'.
O mtodo 'format'
As vezes ns iremos querer const ruir st rings de uma out ra informao. Ist o onde o mt odo
format() t il
#!/usr/bin/python
# Filename: str_format.py

age = 25
name = 'Swaroop'

print('{0} is {1} years old'.format(name, age))
print('Why is {0} playing with that python?'.format(name))
Sa da:
$ python str_format.py
Swaroop is 25 years old
Why is Swaroop playing with that python?
Como ist o funciona:
Uma st ring pode ut ilizar cert as especificaes e sub consequent ement e, o mt odo format
pode ser chamado de um subst it ut o para est as especificaes correspondendo os
argument os ao mt odo format.
Observe que est a primeira vez que usamos {0} e ist o corresponde vriavel name que o
primeiro argument o ao mt odo 'format '. Similarment e, a segunda especificao {1} que
corresponde age que o segundo argument o ao mt odo 'format '. O que o Pyt hon faz aqui
subst it uir cada valor do argument o no lugar da especificao. Que pode t er especificaes
mais det alhadas como:
>>> '{0:.3}'.format(1/3) # decimal (.) precision of 3 for float
'0.333'
>>> '{0:_^11}'.format('hello') # fill with underscores (_) with the text centered (^) to 11 width
'___hello___'
>>> '{name} wrote {book}'.format(name='Swaroop', book='A Byte of Python') # keyword-
based
'Swaroop wrote A Byte of Python'
Det alhes dest a especificao de format ao so explicados na Pyt hon Enhancement
Proposal No. 3101. File:Example.jpg
Variveis
Usar apenas const ant es lit erais pode se t ornar algo chat o - ns precisamos de alguma
maneira de armazenar qualquer informao, bem como manipul-la. a onde as variveis
ent ram na jogada. Variveis so exat ament o o que seu nome significa - seu valor pode variar,
ist o , vce pode armazenar qualquer coisa usando uma varivel. Variveis so apenas part es
da memria do seu comput ador nas quais voc armazena alguma informao. Diferent ement e
das const ant es lit erais, voc precisa de alguma maneira de acessar est as variveis e,
port ant o, voc d nomes a elas.
Nomenclatura de Identificadores
Variveis so exemplos de ident ificadores. Identificadores so nomes dados de maneira a
ident ificar algo. Exist em algumas regras que voc t er que seguir para dar nome aos
ident ificadores:

O primeiro caract er do ident ificador precisa ser uma let ra do alfabet o (maisculo ASCII ou
minsculo ASCII ou caract er Unicode) ou um underscore ('_').
O rest ant e do nome do ident ificador pode consist ir de let ras (maisculo ASCII ou
minsculo ASCII ou caract er Unicode), underscores ('_') ou d git os (0-9).
Nomes de idenficadores so case-sensitive. Por exemplo, myname e myName no so o
mesmo. Not e o minsculo n no primeiro e o maisculo N no segundo.
Exemplos de nomes de ident ificadores vlidos so i, __my_name, name_23, a1b2_c3 and
resum _count.
Exemplos de nomes de idenficadores invlidos so 2things, este contm espaos e my-
name.
Tipos de Dados
Variveis podem mant er valores de diferent es t ipos, chamados de t ipos de dados. Os t ipos
bsicos so nmeros e st rings, que ns j discut imos. Nos prximos cap t ulos, veremos como
criar seus prprios t ipos usando classes.
Objetos
Lembre-se de que Pyt hon se refere a qualquer coisa usada em um programa como um objeto,
em sent ido geral. Ao invs de dizer 'o alguma coisa', ns de dizemos 'o objeto'.
Not a para os usurios de Programao Orient ada a Objet os
Pyt hon fort ement e orient ada a objet os, no sent ido que t udo um objet o, incluindo
nmeros, st rings e funes.
Agora veremos como usar variveis junt ament o com const ant es lit erais. Salve o exemplo a
seguir e execut e o programa.
Como escrever programas em Pyt hon
Daqui em diant e, o procediment o padro para salvar e execut ar um programa Pyt hon a
seguint e:
1. Abra o seu edit or favorit o.
2. Digit e o cdigo do programa dado no exemplo.
3. Salve-o como um arquivo com o nome mencionado no coment rio. Eu sigo a conveno
de t er t odos os programas em Pyt hon salvos com a ext enso .py.
4. Execut e o int erpret ador com o comando python program.py ou use o IDLE para execut ar
os programas. Voc t ambm pode usar o mt odo execut vel como explicado
ant eriorment e.
Exemplo: Utilizando variveis e constantes literais
# Filename : var.py

i = 5
print(i)
i = i + 1
print(i)

s = '''Esta uma string de mltiplas linhas.
Esta a segunda linha.'''
print(s)
Out put :
$ python var.py
5
6
Esta uma string de mltiplas linhas.
Est a a segunda linha.
Como funciona:
Como funciona:
Veja como est e programa funciona. Primeiro, vamos at ribuir o valor const ant e lit eral 5 varivel
i com o operador de at ribuio (=). Est a linha chamada de inst ruo, pois indica que algo
deve ser feit o e nest e caso, ns est amos conect ando o nome da varivel i ao valor 5. Em
seguida, imprimimos o valor de i com o comando print, que, obviament e, apenas imprime o
valor da varivel na t ela.
Ent o somamos 1 ao valor armazenado em i e armazenmos de volt a. Em seguida, imprimimos
e, como esperado, obt emos o valor t t >6</t t >.
Da mesma forma, at ribu mos a st ring lit eral para a varivel s e depois a imprimimos.
Not a para programadores de linguagens est t icas
As variveis so usadas simplesment e at ribuindo-lhes um valor. Nenhuma declarao ou
definio de t ipo de dados necessria ou ut ilizada.
Linhas Lgicas e Fsicas
Uma linha f sica aquela que voc v quando escreve o programa. Uma linha lgica que o
Python v como uma nica inst ruo. Pyt hon implicit ament e assume que cada linha fsica
corresponde a uma linha lgica.
Um exemplo de uma linha lgica uma inst ruo como print('Hello World') - se est e est ava
em uma linha por si s (como voc v no edit or), ent o isso t ambm corresponde a uma linha
f sica.
Implicit ament e, Pyt hon incent iva o uso de uma nica inst ruo por linha, o que t orna o cdigo
mais leg vel.
Se voc quiser especificar mais de uma linha lgica em uma nica linha f sica, ent o voc t em
que especificar explicit ament e usando um pont o-e-v rgula (;) que indica o fim de uma linha
lgica ou inst ruo. Por exemplo,
i = 5
print(i)
o mesmo que
i = 5;
print(i);
e o mesmo pode ser escrit o como
i = 5; print(i);
ou ainda
i = 5; print(i)
No ent ant o, eu recomendo fort ement e que voc se at enha a escrever soment e uma
nica linha lgica para cada linha fsica. Use mais de uma linha f sica para uma nica linha
lgica apenas se a linha lgica for realment e comprida. A ideia evit ar o pont o-e-v rgula t ant o
quant o poss vel, uma vez que isso conduz a um cdigo mais leg vel. De fat o, eu nunca ut ilizei
ou sequer vi um pont o-e-v rgula num programa Pyt hon.
Segue um exemplo da escrit a de uma linha lgica se est endendo por muit as linhas f sicas. Nos
referimos a isso com juno explcit a de linhas
s = 'Isto uma string. \
Isto continua a string.'
print(s)
Isso nos d a sa da:
Isto uma string. Isto continua a string.
Similarment e,
print\
(i)
o mesmo que
print(i)
Em alguns casos no necessrio ut ilizar barra invert ida. Nesses casos a linha lgica usa
parnt eses, colchet es ou chaves. Ist o se chama juno implcit a de linha. Voc pode v-la
em ao quando escrevermos programas usando list as em cap t ulos post eriores.
Indentao
Espaos so import ant es em Pyt hon. Na verdade, espaos no incio da linha so
import ant es. Ist o chamado de indent ao. Espaos (espaos e t abs) no in cio da linha
lgica so usados para det erminar o n vel de indent ao da linha lgica, o qual por sua vez
usado para det erminar o agrupament o de inst rues
Ist o significa que as inst rues que vo junt as devem t er a mesma indent ao. Cada conjunt o
dessas inst rues chamada de bloco. Veremos exemplos de como os blocos so
import ant es nos cap t ulos seguint es.
Uma coisa que voc deve lembrar que indent ao inadequada pode ocasionar erros. Por
exemplo:
i = 5
print('O valor ', i) # Erro! Perceba um espao no incio da linha
print('Eu repito, o valor ', i)
Quando voc execut a isso, obt m o seguint e erro:
File "whitespace.py", line 4
print('O valor ', i) # Erro! Perceba um espao no incio da linha
^
IndentationError: unexpected indent
Perceba que h um espao no in cio da segunda linha. O erro indicado pelo Pyt hon nos diz
que a sint axe do programa invlida, ist o , o programa no foi escrit o direit o. O que isso quer
dizer que voc no pode iniciar novos blocos de instrues arbitrariamente (excet o pelo
bloco principal padro que voc vem usando o t empo t odo, claro). Casos nos quais voc
pode usar novos blocos sero det alhados em cap t ulos post eriores, t ais como o cap t ulo
sobre cont role de fluxo.
Como indent ar
No use uma mist ura de t abs e espaos para a indent ao, pois isso no funciona
adequadament e em diferent es plat aformas. Eu recomendo fortemente que voc use um
nico tab ou quatro espaos para cada n vel de indent ao.
Escolha qualquer um desses dois est ilos de indent ao. Mais import ant e, escolha um e
use consist ent ement e, ist o , use somente aquele est ilo de indent ao.
Not a para programadores de linguagens est t icas
Pyt hon sempre ut iliza indent ao para blocos e nunca ut iliza chaves. Execut e from
__future__ import braces para aprender mais.
Resumo
Agora que ns discut imos vrios det alhes vit ais, podemos seguir para coisas mais
int eressant es como declaraes de cont role de fluxo. Cert ifique-se de que voc Cert ifique-se
de que voc j est confort vel com o que voc leu nesse cap t ulo.
Operadores e Expresses
Contedo

1 Int roduo
2 Operadores
3 Precendncia de Operadores
4 Ordem de avaliao
5 Associat ividade
6 Expresses
6.1 Usando Expresses
7 Sumrio
Introduo
A maioria das inst rues (linhas lgicas) que voc escrever iro cont er expresses. Um
exemplo simples de expresso 2 + 3. Uma expresso pode ser divida em operadores e
operandos.
Operadores definem que operao ser realizada e podem ser represent ados por s mbolos
como + ou por palavras-chave especiais. Operadores requerem dados para funcionar e t ais
dados so chamados operandos. Nest e caso, 2 e 3 so os operandos.
Operadores
Iremos dar uma breve olhada nos operadores e sua ut ilizao:
Perceba que voc pode t est ar as espresses dadas nos exemplos usando o int erpret ador
int erat ivo. Por exemplo, para t est ar a expresso 2 + 3, use o int erpret ador int erat ivo do
Pyt hon:
>>> 2 + 3
5
>>> 3 * 5
15
>>>
Operadores e sua ut ilizao
Operador Nome Explicao Exemplos
+ Adio Soma dois objet os 3 + 5 ret orna 8. 'a' + 'b' ret orna 'ab'.
- Subt rao
Torna um nmero
negat ivo ou a
subt rao de um
nmero por out ro
-5.2 ret orna um nmero negat ivo. 50 - 24
ret orna 26.
* Mult iplicao
Ret orna o produt o de
dois nmeros ou uma
st ring repet ida uma
cert a quant idade de
vezes.
2 * 3 ret orna 6. 'la' * 3 ret orna
'lalala'.
** Pot ncia
Ret orna x elevado
pot ncia de y
3 ** 4 ret orna 81 (i.e. 3 * 3 * 3 * 3)
/ Diviso Divide x por y 4 / 3 ret orna 1.3333333333333333.
// Diviso Int eira
Ret orna a part e int eira
do quocient e
4 // 3 ret orna 1.
% Modulo
Ret orna o rest o da
diviso
8 % 3 ret orna 2. -25.5 % 2.25 ret orna 1.5.
<<
Deslocament o
de bit s
esquerda
Desloca os bit s do
nmero para a
esquerda pelo nmero
de bit s especificado.
(Cada nmero
represent ado na
memria por bit s ou
digit os binrios i.e. 0
and 1)
2 << 2 ret orna 8. 2 represent ado por 10
em bit s. Deslocando os bit s do nmero
esquerda por 2 bit s ret orna 1000, que
represent a o nmero decimal 8.
>>
Deslocament o
de bit s
direit a
Desloca os bit s do
nmero para a direit a
pelo nmero de bit s
especificado.
11 >> 1 ret orna 5. 11 represent ado em
bit s por 1011 que quando os bit s so
deslocados para a direit a por 1 bit ret orna
101, que o nmero decimal 5.
&
sOperador bit
a bit AND
Bit s configurados nos
dois operadores so
configurados no
result ado
5 & 3 ret orna 1.
|
Operador bit a
bit OR
Bit s configurados em
um ou out ro operador
so configurados no
result ado
5 | 3 ret orna 7
^
Operador bit a
bit XOR
Bit s configurados em
um ou out ro operador,
mas no em ambos,
so configurados no
result ado
5 ^ 3 ret orna 6
~
Operador bit a
bit NOT
Bit s configurados no
operador no so
configurados no
result ado e vice-versa.
~5 ret orna -6.
< Menor que
Ret orna se x menor
que y. Todos os
operadores de
comparo ret ornam
True(verdadeiro) ou
False(falso). Not e a
capit alizao dos
nomes.
5 < 3 ret orna False e 3 < 5 ret orna True.
Comparaes podem ser encadeadas
arbit rariament e: 3 < 5 < 7 ret orna True.
> Maior que
Ret orna se x maior
que y
5 > 3 ret orna True. Se os dois operadores
forem nmeros, eles so ant es
convert idos a um t ipo comum. De out ra
maneira, ser sempre ret ornado False.
<=
Menor ou
igual a
Ret orna se x menor
ou igual a y
x = 3; y = 6; x <= y ret orna True.
>=
Maior ou igual
a
Ret orna se x maior
ou igual a y
x = 4; y = 3; x >= 3 ret orna True.
== Igual a
Compara se os
objet os so iguais
x = 2; y = 2; x == y ret orna True.
x = 'str'; y = 'stR'; x == y ret orna
False.
x = 'str'; y = 'str'; x == y ret orna
True.
!= Diferent e de
Compara se os
objet os so diferent es
x = 2; y = 3; x != y ret orna True.
not
Operador
booleano
NOT
Se x True, ele
ret orna False. Se x
False, ele ret orna True.
x = True; not y ret orna False.
and
Operador
booleano AND
x and y ret orna False
se x False, seno ele
ret orna a avaliao de
y
x = False; y = True; x and y ret orna
False desde que x seja False. Nest e caso,
Pyt hon no ir avaliar y desde que ele
saiba que o lado esquerdo da espresso
'and' False o que implica que t oda a
espresso ser False independent e do
out ro valor. isso chamado short -circuit
evaluat ion.
or
Operador
booleano OR
Se x True, ele
ret orna True, seno
ele ret orna a avaliao
de y
x = True; y = False; x or y ret orna
True. A Short -circuit evaluat ion se aplica
aqui t ambm.
Precendncia de Operadores
Se voc t em uma expresso como 2 + 3 * 4, ser realizada primeiro a adio ou a
mult iplicao? A mat emt ica do nosso ensino mdio nos diz que a mult iplicao deve ser
realizada primeiro. Isso significa que o operador de mult iplicao possui maior precedncia que
o operador de adio.
A t abela a seguir nos d a ordem de precedncia de operadores para o Pyt hon, do de menor
precedncia (least binding) ao de maior precedncia (most binding). Ist o significa que em uma
dada expresso, Pyt hon ir primeirament e avaliar os operadores list ados na base da t abela
ant es dos operadores list ados ao t opo.
A t abela a seguir (t irada de Manual de referncia Pyt hon) proporcionada visando maior
ent endiment o. muit o melhor usar parnt eses para agrupar operadores e operandos
apropriadament e de maneira que fique clara a precedncia. Isso t orna o programa mais leg vel.
Veja #Ordem de Avaliao abaixo para det alhes.
Precedncia de Operadores
Operador Descrio
lambda Expresso Lambda
or Operador Booleano OR
and Operador Booleano AND
not x Operador Booleano NOT
in, not in Test es de membros/exist ncia
is, is not Test es de ident idade
<, <=, >, >=, !=, == Comparaes
| Operador bit -a-bit OR
^ Operador bit -a-bit XOR
& Operador bit -a-bit AND
<<, >> Deslocament os de bit s
+, - Adio e subt rao
*, /, //, % Mult iplicao, Diviso, Diviso int eira e Rest o
+x, -x Posit ivo, Negat ivo
~x sOperador bit -a-bit NOT
** Exponenciao
x.at ribut o Referencia a at ribut o
x[ ndice] Subscrio
x[ ndice1: ndice2] Repart io
f(argument os ...) Chamada de funo
(expresses, ...) Uniao ou exibio de t upla
[expresses, ...] Exibio de list as
{chave:dado, ...} Exibio de dicionrio
Os operadores que ainda no vimos sero explicados em cap t ulos post eriores.
Operadores com a mesma precedncia so list ados na mesma linha na t abela acima. Por
exemplo, + e - possuem a mesma precedncia.
Ordem de avaliao
Por padro, a t abela de precedncia dos operadores decide que operadores so avaliados
primeiro.
Para t ornar uma expresso mais leg vel podemos usar parnt eses. Por exemplo, 2 + (3 * 4)
, definit ivament e, mais fcil de ent ender que 2 + 3 * 4 que requer conheciment o da ordem
de precedncia dos operadores. Assim como t odo o rest o, parnt eses devem ser usados
conscient ement e (no sobrecarregue) e no devem ser redundant es (como em 2 + (3 + 4)).
Se voc quer mudar a ordem em que eles so avaliados, voc pode, novament e, usar
parnt eses. Por exemplo, se voc quer que a adio seja realizada ant es da mult iplicao em
uma expresso, ent o voc pode escrever algo como (2 + 3) * 4.
Associatividade
Operadores so, geralment e, associados da esquerda para a direit a, ist o , operadores com a
mesma procedncia so avaliados da esquerda para a direit a. Por exemplo, 2 + 3 + 4
avaliado como (2 + 3) + 4. Alguns operadores, como os de at ribuio, possuem a
associat ividade da direira para a esquerda, ist o , a = b = c t rat ado como a = (b = c).
Expresses
Usando Expresses
Exemplo:
#!/usr/bin/python
# Nome do Arquivo: expressao.py

length = 5
breadth = 2

area = length * breadth
print('rea ', area)
print('Permetro ', 2 * (length + breadth))
Sa da:
$ python expressao.py
rea 10
Perimetro 14
Como Funciona:
O t amanho e amplit ude do ret ngulo so armazenados nas variveis lengt h e breadt h. Ns os
ut ilizamos para calcular a rea e o per met ro do ret ngulo com a ajuda de expresses.
Armazenamos o result ado da expresso length * breadth na varivel area e ent o o
imprimimos usando a funo print. No segundo caso, usamos o valor da expresso 2 *
(length + breadth) diret ament e na funo print .
Perceba, t ambm, como o Pyt hon faz a 'impresso elegant e' (pret t y-print ) da sa da. Mesmo
que no t enhamos especificao um espao ent re 'rea ' e a varivel area, Pyt hon coloca-o
para ns de uma maneira que t enhamos uma sa da limpa e bonit a, e o programa muit o mais
leg vel dessa maneira (desde que no t enhamos que nos preocupar com espaament o na
st ring que ut ilizamos para a sa da). Ist o um exemplo de como o Pyt hon t orna mais fcil a vida
do programador.
Sumrio
Vimos como ut ilizar operadores, operandos e expresses - est es so os blocos de const ruo
bsicos de qualquer programa. A seguir, veremos como fazer uso deles em nossos programas
at ravs de indicao.
Controle de Fluxo
Contedo

1 Int roduo
2 A inst ruo IF
3 A inst ruo while
4 O loop for
5 A inst ruo break
5.1 Pyt hon Pot ico do Swaroop
6 A Inst ruo cont inue
7 Sumrio
Introduo
Nos programas que vimos at agora, houveram uma srie de declaraes e o Pyt hon execut a-
os na mesma ordem. E se voc quisesse alt erar o fluxo de seu funcionament o? Por exemplo,
voc quer que o programa t ome algumas decises e faa diferent es coisas dependendo das
diferent es sit uaes, como imprimir 'Bom Dia' ou 'Boa Tarde' dependendo da hora do dia?
Como voc deve t er pensando, ist o alcanado usando as inst rues de cont role de fluxo no
Pyt hon - if, for e while.
A instruo IF
A inst ruo if usada para verificar uma condio e se a condio verdadeira, ser
execut ado um bloco de inst rues (chamado de bloco-if(if-block)) , seno ser processado
out ro bloco de inst rues (chamado de bloco-else(else-block)). A clusula else opcional.
Exemplo:
#!/usr/bin/python
# Nome do aquivo: if.py

number = 23
guess = int(input('Entre com um nmero inteiro : '))

if guess == number:
print('Parabns, voc advinhou.') # Novo bloco comea aqui
print('(mas voc no ganhou nenhum prmio!)') # Novo bloco termina aqui
elif guess < number:
print('No, era um pouco maior que isso') # Outro bloco
# Voc pode fazer o que quiser em um bloco ...
else:
print('No, era um pouco menor que isso')
# Voc deve adivinhar > nmero a alcanar aqui

print('Feito')
# Esta ltima instruo sempre executada, depois da instruo if ser executada
Sa da:
$ python if.py
Entre com um nmero inteiro : 50
No, era um pouco menor que isso
Feito

$ python if.py
Entre com um nmero inteiro : 22
No, era um pouco maior que isso
Feito

$ python if.py
Entre com um nmero inteiro : 23
Parabns, voc advinhou.
(mas voc no ganhou nenhum prmio!)
Feito
Como Funciona:
Nest e programa, recebemos t ent at ivas de advinhaes do usurio e verificamos se est e
igual ao nmero que t emos. Set amos a varivel number para qualquer int eiro que desejarmos,
digamos 23. Ent o, pegamos a t ent at iva de advinhao do usurio usando a funo input().
Funes so peas de programas reut ilizveis. Iremos ler mais sobre elas no prximo cap t ulo.
Ns fornecemos uma st ring para funo enbut ida input que a imprime na t ela e aguarda uma
ent rada do usurio. Uma vez que ent ramos com algum valor e apert amos a t ecla enter, a
funo input() ret orna o valor que ent ramos, como uma st ring. Ns, ent o, convet emos essa
st ring para um int eiro usando int e depois armazenamos na varivel guess. Na verdade, o int
uma classe, mas t udo o que vo precisa saber agora que voc pode us-la para convert er
uma st ring em um nmero int eiro (assumindo que a st ring cont m um nmero int eiro vlido no
t ext o).
A seguir, comparamos a t ent at iva de adivinhao do usurio com o nmero que escolhemos.
Se eles forem iguais, imprimimos uma mensagem de sucesso. Not e que ut ilizamos n veis de
indent aopara dizer ao Pyt hon que inst rues pert encem a qual bloco. pos isso que a
indent ao t o import ant e no Pyt hon. Eu espero que voc est eja mant endo a regra da
"indent ao consist ent e". Voc est ?
Perceba que a inst ruo if cont m 'dois pont os' no final - ns est amos indicando ao Pyt hon
que a seguir h um bloco de inst rues.
Ent o, checamos se a t ent at iva de advinhao do usurio menor que o nmero da varivel
number, e se for verdadeiro, informamos ao usurio para t ent ar com um nmero um pouco
maior que o inserido. O que usamos aqui a clausula elif que, na verdade, combina duas
inst rues if else-if else relacionadas em uma inst ruo if-elif-else combinada. Isso
t orna o programa mais fcil e reduz quant idade de indent aes requeridas.
As inst rues elif else devem, t ambm, possuir 'dois pont os' no final da linha lgica, seguido
pelo seu bloco de inst rues correspondent e (com indent ao apropriada, claro).
Voc pode t er out ra inst ruo if dent ro de um bloco-if de uma inst ruo if if a assim por
diant e - ist o chamado de inst ruo if aninhada
Lembre que as part es elif e else so opcionais. Uma inst ruo if m nima vlida :
if True:
print('Sim, verdadeiro')
Depois que pyt hon t erminou de execut ar a inst ruo if complet ament e, junt o com as
clusulas elif e else associadas, ele passa para a prxima inst ruo no bloco cont endo a
inst ruo if. Nest e caso, o bloco principal onde a execuo do programa inicia e a prxima
inst ruo print('Feito'). Depois disso, Pyt hon v o final do programa e simplesment e
t ermina.
Ainda que est e seja um programa muit o simples, eu est ive apont ando vrias coisas que voc
deve not ar em programas assim. Todas elas so bem avanadas (e surpreendent ement e
simples para t odos vocs com conheciment o em C/C++) e requerem que voc est eja
inicialment e cient e de t odas elas, mas depois disso, voc ir se familiarizar e isso ir se t ornar
'nat ural' para voc.
Not a para os programadores de C/C++
No h a inst ruo switch no Pyt hon. Voc pode usar uma inst ruo if..elif..else para
fazer a mesma coisa (e em alguns casos, usar um dicionrio para faz-lo rapidament e)
A instruo while
A inst ruo while permit e que voc execut e repet idament e um bloco de inst rues enquant o
uma condio for verdadeira. Uma inst ruo while um exemplo do que chamado de
inst ruo de looping. Uma inst ruo while pode t er uma clusula else opcional.
Exemplo:
#!/usr/bin/python
# Nome do arquivo: while.py

number = 23
running = True

while running:
guess = int(input('Entre com um nmero inteiro : '))

if guess == number:
print('Parabns, voc advinhou.')
running = False # Isto faz o loop while parar
elif guess < number:
print('No, um pouco maior que este.')
else:
print('No, um pouco menor que este.')
else:
print('O loop while terminou.')
# Faa qualquer outra coisa que quiser aqui

print('Fim')
Sa da:
$ python while.py
Entre com um nmero inteiro : 50
No, um pouco menor que este.
Entre com um nmero inteiro : 22
No, um pouco maior que este.
Enter an integer : 23
Parabns, voc advinhou.
O loop while terminou.
Fim
Como funciona:
Nest e programa, ns ainda est amos jogando o jogo da advinhao, mas a vant agem que o
usurio pode cont inuar t ent ando advinhar at que ele acert e o nmero - no ha necessidade
de rodar novament e o programa para cada t ent at iva de adivinhao, como fizemos na seo
ant erior. Ist o demonst ra o uso da inst ruo while.
Ns movemos oinput e a inst ruo if para dent ro do loop while e set amos a varivel running
para True ant es do loop while. Primeiro, ns checamos se a varivel running True(verdadeiro)
e ent o seguimos para execut ar execut ar o <emphasis>bloco while</emphasis>
correspondent e. Depois que o bloco execut ado, a condio novament e checada que nest e
caso a varivel running. Se isso verdade, ns execut amos o bloco while novament e, seno
cont inuamos para execut ar o bloco else opt ional e ent o seguir para a prxima inst ruo.
O bloco else execut ado quando a condio do loop while se t orna False(falso) - est a pode
at ser a primeira vez que a condio verificada. Se h alguma clusula else para um loop
while, ele sempre execut ado a menos que voc t enha um loop while que se execut ado para
sempre sem sair sequer uma vez!
Os valores True(verdadeiro) e False(falso) so chamados t ipos Booleanos e voc pode
consider-los equivalent es aos valores 1 e 0 respect ivament e.
O bloco else , na verdade, redundant e a part ir que voc pode colocar est as inst rues no
mesmo bloco (como a inst ruo while) depois da inst ruo while para conseguir o mesmo
efeit o.
Not a para programadores de C/C++
Lembre que voc pode t er uma clusula else else para o loop while.
O loop for
A inst ruo for..in out ra inst ruo de loop que itera sobre uma sequncia de objet os, por
exemplo, percorre cada it em em uma sequncia. Iremos ver mais sobre sequncias em
det alhes em cap t los post eriores. O que voc precisa saber agora que uma sequncia
apenas uma coleo ordenada de it ens.
Exemplo:
#!/usr/bin/python
# Nome do arquivo: for.py

for i in range(1, 5):
print(i)
else:
print('O loop for terminou.')
Sa da:
$ python for.py
1
2
3
4
O loop for terminou.
Como funciona:
Nest e programa, est amos imprimindo uma sequncia de nmeros. Ns geramos est a
sequncia de nmeros usando a funo int erna range.
O que fazemos fornecer dois nmeros e range ret orna uma sequncia de nmeros iniciando
do primeiro nmero e segue at o segundo nmero. Por exemplo, range(1,5) nos d a
sequncia [1, 2, 3, 4]. Por padro, range d um passo cont ando de 1 em 1. Se fornecer-mos
um t erceiro nmero para range, ent o ele se t orna o t amanho do passo. Por exemplo,
range(1,5,2) nos d [1,3]. Lembre-se que range ext ende-se at o segundo nmero, ou seja,
ele no inclui o segundo nmero.
O loop for ent o it era sobre est a faixa - for i in range(1,5) equivalent e a for i in [1,
2, 3, 4] que a mesma coisa que at ribuir cada nmero (ou objet o) na sequncia a i, um de
cada vez, e ent o execut ar o bloco de inst ries para cada valor de i. Nest e caso, ns apenas
imprimimos o valor no bloco de inst rues.
Lembre-se que a part e else opcional. Quando inclu da, ela ser sempre execut ada uma vez
aps o loop for t er t erminado, a no ser que uma inst ruo break seja encont rada.
Lembre-se que o loop for..in funciona para qualquer sequncia. Aqui, t emos uma list a de
nmeros gerados pela funo int erna range, mas, no geral, podemos usar qualquer t ipo de
sequncia de qualquer t ipo de objet o! Iremos explorar essa idia em det alhes em cap t ulos
post eriores.
Not a para programadores de C/C++/Java/C#
O loop for do Pyt hon radicalment e diferent e do loop for das linguagens C/C++.
Programadores da linguagem C# iro not ar que o loop for no Pyt hon similar ao loop
foreach em C#. Programadores da linguagem Java iro not ar que o mesmo similar a for
(int i : IntArray) em Java 1.5 .
Em C/C++, se voc quer escrever for (int i = 0; i < 5; i++), ent o em Pyt hon voc
escreve apenas for i in range(0,5). Como voc pode ver, o loop for mais simples,
mais expressivo e menos propenso a erros no Pyt hon.
A instruo break
A inst ruo break usada para quebrar uma inst ruo de loop, ou seja, para a execuo de
uma inst ruo de loop, mesmo que a condio no t enha se t ornado False ou a sequncia de
it ens t enha sido it erada complet ament e.
Uma informao import ant e que se voc quebra um loop for ou while, qualquer bloco else
correspondent e no execut ado.
Exemplo:
#!/usr/bin/python
# Nome do arquivo: break.py

while True:
s = input('Entre com alguma coisa: ')
if s == 'sair':
break
print('Tamanho da string ', len(s))
print('Feito')
Sa da:
$ python break.py
Entre com alguma coisa: Programar divertido
Tamanho da string 21
Entre com alguma coisa: Quando o trabalho est feito
Length of the string is 28
Entre com alguma coisa: se voc quer tornar seu trabalho tambm divertido:
Tamanho da string 51
Entre com alguma coisa: use Python!
Tamanho da string 12
Entre com alguma coisa: sair
Feito
Como funciona:
Nest e programa, ns recebemos os dados de ent rada do usurio repet idament e e imprimimos
o t amanho de cada ent rada t oda vez. Est amos provendo uma condio especial para parar o
programa verificando se a ent rada do usurio 'sair'. Paramos o programa com
<emphasis>break</emphasis>, fazendo com que saiamos do loop e alcancemos o fim do
programa.
O t amanho da ent rada pode ser encont rado ut ilizando a funo int erna len.
Lembre-se que a inst ruo break pode t ambm ser usada com o loop for.
Python Potico do Swaroop
Os dados de ent rada que ut ilizei aqui um mini poema que escrevi chamado Pyt hon Pot ico
do Swaroop:
Programar divertido
Quando o trabalho est feito
se voc quer tornar seu trabalho tambm divertido:
use Python!
A Instruo continue
A inst ruo continue usada para dizer ao Pyt hon que pule as int rues rest ant es do bloco
de loop corrent e e para cont inuar (continue) na it erao seguint e do loop.
Exemplo:
#!/usr/bin/python
# Arquivo: continue.py

while True:
s = input('Entre com algo : ')
if s == 'sair':
break
if len(s) < 3:
print('Muito pequeno')
continue
print('A entrada de tamanho suficiente')
# Faa outros tipos de processo aqui...
Sa da:
$ python continue.py
Entre com algo : a
Muito pequeno
Entre com algo : 12
Muito pequeno
Entre com algo : abc
A entrada de tamanho suficiente
Entre com algo : sair
Como funciona:
Nest e programa, aceit amos ent radas do usurio, mas as processamos soment e se ela
possu rem pelo menos 3 caract eres. Ent o, ut ilizamos a funo int erna len para pegar o
t amanho e se est e for menor que 3, pulamos o rest o das inst rues no bloco ut ilizando a
inst ruo continue. Seno, o rest o das inst rues no loop so execut adas e poderemos fazer
qualquer t ipo de processament o que quiser-mos aqui.
Not e que a inst ruo continue funciona, t ambm, com o loop for.
Sumrio
Vimos como ut ilizar as t rs inst rues de cont role de fluxo - if, while and for, em conjunt o
com suas inst rues break e continue associadas. Est as so algumas das part es mais
ut ilizadas do Pyt hon e out ras, t ornar-se confort vel com elas essencial.
Funes
Contedo

1 Int roduo
2 Parmet ros da Funo
3 Variveis Locais
4 Usando o comando global
5 Usando o comando nonlocal
6 Valores padro de argument os
7 Argument os Nomeados
8 Parmet ros VarArgs
9 Parmet ros apenas por palavra-chave
10 O comando ret urn
11 DocSt rings
12 Anot aes
13 Sumrio
Introduo
Funes so pedaos reut ilizveis de programas. Elas permit em dar um nome para um bloco
de cdigo e rod-lo usando seu nome em qualquer lugar do programa, quant as vezes forem
necessrias. Ist o conhecido como chamar a funo. Ns j usamos muit as funes int ernas
como len e range.
O conceit o de funo provavelment e o bloco de const ruo mais import ant e de qualquer
programa no-t rivial (em qualquer linguagem de programao), port ant o vamos explorar vrios
aspect os das funes nest e cap t ulo.
Funes so definidas usando a palavra-chave def. A mesma seguida pelo seu nome
identificador, um par de parnt eses que podem cont er ou no nomes de variveis separados
por v rgula, e por dois pont os ao final da linha. Em seguida o bloco de cdigo que faz part e
dest a funo. Um exemplo abaixo ir most rar que ist o realment e muit o simples:
Exemplo:
#!/usr/bin/python
# Filename: funcao1.py

def digaOla():
print('Ol Mundo!') # bloco pertencente funo
# Fim da funo

digaOla() # chamando a funo
digaOla() # chamando a funo denovo
Out put :
$ python funcao.py
Ol Mundo!
Ol Mundo!
Como ist o funciona:
Definimos a funo chamada digaOla usando a sint axe como explicado abaixo. Est a funo
no recebe parmet ros e conseqent ement e no h variveis declaradas ent re parnt eses.
Para as funes, parmet ros so soment e uma ent rada que podemos passar diferent es
valores e receber result ados correspondent es.
Repare que podemos chamar a mesma funo duas vezes, o que significa que no t emos que
escrever o mesmo cdigo de novo.
Parmetros da Funo
Uma funo pode receber parmet ros, que so valores fornecidos funo para que a mesma
possa fazer algo t il com os mesmos. Est es parmet ros so como variveis, excet o que os
valores dest as variveis so definidos quando chamamos a funo e j est o at ribu dos
quando a funo execut ada.
Parmet ros so especificados dent ro do par de parnt eses na definio da funo, separados
por v rgulas. Quando chamamos a funo, passamos os valores da mesma maneira. Not e a
t erminologia ut ilizada - os nomes dados na definio da funo so chamados de parmetros
enquant o que os valores que fornecemos na chamada da funo so chamados de
argusmentos.
Exemplo:
#!/usr/bin/python
# Filename: func_param.py

def printMax(a, b):
if a > b:
print(a, 'is maximum')
else:
print(b, 'is maximum')

printMax(3, 4) # valores literais passados para a funo

x = 5
y = 7

printMax(x, y) # passando variveis como argumentos
Sa da:
$ python func_param.py
4 is maximum
7 is maximum
Como funciona:
Aqui definimos uma funo chamada printMax que recebe dois parmet ros chamados a e b.
Encont ramos o maior nmero usando um simples comando if..else e ent o imprimindo o
maior nmero.
No primeiro uso de printMax, nos passamos diret ament e os nmeros (argument os). No
segundo, chamamos a funo usando variveis. printMax(x, y) faz com que o valor do
argument o x seja at ribu do ao parmet ro a e o valor do argument o y at ribu do ao parmet ro b.
A funo print Max funciona da mesma maneira em ambos os casos.
Variveis Locais
Quando voc declara variveis dent ro de uma definio de funo, elas no est o
relacionadas de forma alguma com out ras variveis com os mesmos nomes usados fora da
funo, ou seja, variveis locais em relao funo. Ist o o que se chama de escopo da
varivel. Todas as variveis t m o escopo do bloco no qual so declaradas, a part ir do pont o
da definio do seu nome.
Exemplo:
#!/usr/bin/python
# Filename: func_local.py

def func(x):
print('x is', x)
x = 2
print('Varivel local x mudou para', x)

x = 50
func(x)
print('x continua', x)
Sa da:
$ python func_local.py
x is 50
Varivel local x mudou para 2
x continua 50
Como funciona:
Na funo, a primeira vez que usamos o valor do nome x, o Pyt hon ut iliza o valor do
parmet ros declarado na funo.
Em seguida, at ribu mos o valor 2 a x. O nome x local nossa funo. Ent o, quando
mudamos o valor de x na funo, o x definido no bloco principal permanece inalt erado.
No lt imo comando print, confirmamos que o valor de x no bloco principal est de fat o
inalt erado.
Usando o comando global
Se voc quer at ribuit um valor a um nome definido no n vel mais alt o do programa, ou seja, fora
de qualquer t ipo de escopo t al como funes ou classes, ent o voc t em que dizer ao Pyt hon
que o nome no local, mas sim global. Fazemos isso usando o comando global. imposs vel
at ribuir um valor a uma varivel definida fora de uma funo sem ut ilizar o comando global.
Voc pode usar os valores dessas variveis globais definidas fora da funo, assumindo que
no haja nenhuma varivel com o mesmo nome dent ro da funo. No ent ant o, isso no
recomendado e deve ser evit ado, uma vez que no fica claro para o leit or do programa onde
est a definio da varivel. Usar o comando global t orna claro que a varivel foi definida no
block mais ext erno.
Exemplo:
#!/usr/bin/python
# Filename: func_global.py

def func():
global x

print('x ', x)
x = 2
print('Varivel global x mudou para', x)

x = 50
func()
print('O valor de x ', x)
Sa da:
$ python func_global.py
x is 50
Varivel global x mudou para 2
O valor de x 2
Como funciona:
O comando global usado para declarar que x uma varivel global. Assim, quando vamos
at ribuir um valor a x dent ro da funo, essa mudana reflet ida quando usamos o valor de x
no bloco principal.
Voc pode especificar mais de uma varivel global usando o mesmo comando global. Por
exemplo, global x, y, z.
Usando o comando nonlocal
Vimos acima como acessar variveis nos escopos local e global. Exist e out ro t ipo de escopo
chamado "nonlocal", que um meio t ermo ent re esses dois t ipos de escopo. Escopos nonlocal
ocorrem quando se definem funes dent ro de funes.
Uma vez que t udo em Pyt hon cdigo execut vel, voc pode definir funes em qualquer
lugar.
Vejamos um exemplo:
#!/usr/bin/python
# Filename: func_nonlocal.py

def func_outer():
x = 2
print('x ', x)

def func_inner():
nonlocal x
x = 5

func_inner()
print('O x local mudou para', x)

func_outer()
Sa da:
$ python func_nonlocal.py
x 2
O x local mudou para 5
Como funciona:
Quando est amos dent ro de func_inner, o 'x' definido na primeira linha de func_outer no est ,
relat ivament e, nem no escopo local, nem no global. Declaramos que est amos usando esse x
por meio de nonlocal x e assim t emos acesso quela varivel.
Tent e t rocar o nonlocal x para global x e t ambm remover o comando e observar a
diferena de comport ament o nesses dois casos.
Valores padro de argumentos
Para algumas funes, voc pode querer que alguns dos seus parmet ros sejam opcionais e
usar valores padro pr-definidos se o usurio no quiser fornecer valores para esses
parmet ros. Ist o feit o com a ajuda de valores padro de argument os. Voc pode especificar
valores padro de argument os para parmet ros colocando o operador de at ribuio (=) aps o
nome do parmet ro na definio da funo, seguifo pelo valor padro.
Not e que o valor do argument o padro dever ser uma const ant e. Mais precisament e, o valor
do argument o padro deve ser imut vel. Isso explicado em det alhes nos cap t ulos seguint es.
Por enquant o, bast a lembrar disso.
Exemplo:
#!/usr/bin/python
# Filename: func_default.py

def say(message, times = 1):
print(message * times)

say('Ol')
say('Mundo', 5)
Sa da:
$ python func_default.py
Ol
MundoMundoMundoMundoMundo
Como funciona:
A funo chamada say usada para imprimir uma st ring quant as vezes forem necessrias. Se
ns no fornecemos um valor, ent o, por padro, a st ring impressa apenas uma vez.
Conseguimos isso especificando um valor de argument o padro 1 para o parmet ro times.
No primeiro uso de say, fornecemos apenas a st ring e ele a imprime uma vez. No segundo uso
de say, fornecemos t ant o a st ring quant o o argument o 5 5 det erminando que queremos dizer
a mensagem 5 vezes.
Import ant e
Apenas os parmet ros que est iverem no final da list a de parmet ros podem receber
valores padro de argument o, ou seja, voc no pode t er um parmet ro com valor de
argument o padro ant es de um parmet ro sem um valor de argument o padro na ordem
dos parmet ros declarados na list a de parmet ros da funo.
O mot ivo que os valores so at ribu dos aos parmet ros por posio. Por exemplo, def
func(a, b=5) vlido, mas def func(a=5, b) no vlido.
Argumentos Nomeados
Se voc t em funes com muit os parmet ros e quer especificar apenas alguns deles, ent o
voc pode passar valores para esse parmet ros nomeando-os. Ist o o que chamamos de
argumentos nomeados. Usamos o nome (palavra-chave) ao invs da posio (como viemos
usando at agora) para especificar os argument os para a funo.
Exist em duas vantagens nessa abordagem: primeiro, mais fcil usar a funo, uma vez que
no precisamos nos preocupar com a ordem dos argument os. Segundo, podemos dar valores
apenas para os parmet ros que quisermos, desde que os demais t enham valores padro de
argument o.
Exemplo:
#!/usr/bin/python
# Filename: func_key.py

def func(a, b=5, c=10):
print('a ', a, 'e b ', b, 'e c ', c)

func(3, 7)
func(25, c=24)
func(c=50, a=100)
Sa da:
$ python func_key.py
a 3 e b 7 e c 10
a 25 e b 5 e c 24
a 100 e b 5 e c 50
Como funciona:
A funo chamada func t em um parmet ro sem valores padro de argument o, seguida por
dois parmet ros sem valores padro de argument o.
No primeiro uso, func(3, 7), o parmet ro a recebe o valor 3, o paramet ro b recebe o valor 5 e c
recebe o valor padro de 10.
No segundo uso func(25, c=24), a varivel a recebe o valor de 25 devido posio do
argument o. Ent o, o parmet ro c fica com o valor de 24 devido ao nome, ou seja, aos
argument os nomeados. A varivel b fica com o valor padro de 5.
No t erceiro uso func(c=50, a=100), ut ilizamos soment e argument os nomeados para
especificar os valores. Not e que est amos especificando o valor para o parmet ro c ant es do
valor do parmet ro a ainda que a t enha sido definido ant es de c na definio da funo.
Parmetros VarArgs
TODO
Devo escrever sobre est e assunt o num cap t ulo post erior, uma vez que ainda no
falamos sobre list as e dicionrios?
s vezes voc pode querer definir uma funo que possa receber qualquer nmero de
parmet ros. Isso pode ser conseguido usando os ast eriscos:
#!/usr/bin/python
# Filename: total.py

def total(initial=5, *numbers, **keywords):
count = initial
for number in numbers:
count += number
for key in keywords:
count += keywords[key]
return count

print(total(10, 1, 2, 3, vegetables=50, fruits=100))
Sa da:
$ python total.py
166
Como funciona:
Quando declaramos um parmet ro prefixado com um ast erisco, t al como *param, ent o t odos
os argument os posicionais daquele pont o at o final so armazenados numa list a chamada
'param'.
De maneira similiar, quando declaramos um parmet ro prefixado com dois ast eriscos, t al como
**param, ent o t odos os argument os nomeados, a part ir daquele pont o at o final, sero
armazenados em um dicionrio chamado 'param'.
Vamos explorar as list as e dicionrios em um cap t ulo mais frent e.
Parmetros apenas por palavra-chave
Se quisermos especificar que cert os parmet ros por palavra-chave est ejam dispon veis
soment e por palavra-chave e no como argument os posicionais, est es pode ser declarados
aps um parmet ro marcado com ast erisco:
#!/usr/bin/python
# Filename: keyword_only.py

def total(initial=5, *numbers, vegetables):
count = initial
for number in numbers:
count += number
count += vegetables
return count

print(total(10, 1, 2, 3, vegetables=50))
print(total(10, 1, 2, 3))
# Levanta um erro, pois no fornecemos um valor de argumento padro para 'vegetables'
Sa da:
$ python keyword_only.py
66
Traceback (most recent call last):
File "test.py", line 12, in <module>
print(total(10, 1, 2, 3))
TypeError: total() needs keyword-only argument vegetables
Como funciona:
Declarar parmet ros aps um parmet ro marcado com ast erisco result a em argument os
apenas por palavra-chave. Se est es argument os no so fornecidos com um valor padro,
ent o chamadas funo levant aro um erro se o argument o por palavra-chave no
fornecido, como vist o acima.
Se voc quer t er apenas parmet ros por palavra-chave mas no precisa de um parmet ro
marcado com ast erisco, ent o simplesment e use um ast erisco sem qualquer nome, t al como
def total(initial=5, *, vegetables).
O comando return
O comando return usado para retornar da execuo de uma funo, ist o , sair da funo.
Podemos, opcionalment e, retornar um valor vindo da funo.
Exemplo:
#!/usr/bin/python
# Filename: func_return.py

def maximum(x, y):
if x > y:
return x
else:
return y

print(maximum(2, 3))
Sa da:
$ python func_return.py
3
Como funciona:
A funo maximum ret ornar o maior valor ent re os parmet ros, nest e caso, os nmeros
fornecidos para a funo. Ela usa um simples comando if..else para encont rar o maior valor e
retorna esse valor.
Not e que um comando return sem um valor equivalent e a return None. None um t ipo
especial em Pyt hon que represent a um valor nulo. Por exemplo, usado para indicar que uma
varivel no possui nenhum valor quando t em o valor None.
Cada funo implicit ament e cont m um comando return None no final, a menos que voc
t enha escrit o seu seu prprio comando return. Voc pode confirmar isso execut ando a print
someFunction() onde a funo someFunction no usa o comando return, t al como:
def someFunction():
pass
O comando pass usado em Pyt hon para indicar um bloco de comandos vazio.
Not a
Exist e uma funo embut ida chamada max que j implement a a funcionalidade 'encont rar
mximo'. Port ant o, use est a funo sempre que poss vel.
DocStrings
Pyt hon possui um recurso chamado strings de documentao, usualment e conhecidas pelo
seu nome mais curt o, docstrings. DocSt rings so uma ferrament a import ant e da qual voc
deve fazer uso, uma vez que ela ajuda a document ar o programa e o t orna mais fcil de
ent ender. Pyt hon has a nift y feat ure called documentation strings, usually referred t o by it s
short er name docstrings. DocSt rings are an import ant t ool t hat you should make use of since it
helps t o document t he program bet t er and makes it more easy t o underst and.
Surpreendent ement e, podemos at obt er a docst ring de, digamos, uma funo, durant e a
execuo do programa!
Exemplo:
#!/usr/bin/python
# Filename: func_doc.py

def printMax(x, y):
'''Imprime o maior entre dois nmeros.

Os dois valores devem ser inteiros.'''
x = int(x) # converte para inteiro, se possvel
y = int(y)

if x > y:
print(x, ' o mximo')
else:
print(y, ' o mximo')

printMax(3, 5)
print(printMax.__doc__)
Sa da:
$ python func_doc.py
5 o mximo
Imprime o maior entre dois nmeros.
Os dois valores devem ser inteiros.
Como funciona:
Uma st ring na primeira linha lgica de uma funo o docstring para essa funo. Not e-se que
docst rings t ambm se aplicam a mdulos e classes, que vamos aprender sobre nos
respect ivos cap t ulos.
A conveno seguida para um docst ring uma st ring de mlt iplas linhas onde a primeira linha
comea com uma let ra maiscula e t ermina com um pont o. Em seguida, a segunda linha fica
em branco, seguida de uma explicao det alhada a part ir da t erceira linha. fortemente
recomendado que voc siga est a conveno para t odos os seus docst rings em t odas as suas
funes no-t riviais.
Podemos acessar a docst ring da funo printMax usando o at ribut o (nome pert encent e a)
__doc__ (not e o duplo sublinhado) da funo. Lembre-se que Pyt hon t rat a tudo como um
objet o e isso inclui funes. Vamos saber mais sobre os objet os no cap t ulo sobre classes.
Se voc j usou o help() em Pyt hon, ent o voc j viu o uso de docst rings! O que ele faz
apenas buscar o at ribut o __doc__ dessa funo e o exibir para voc de uma forma elegant e.
Voc pode experiment -lo na funo acima - bast a incluir help(printMax) no seu programa.
Lembre-se de pressionar a t ecla q para sair do help().
Ferrament as aut omat izadas podem recuperar a document ao do seu programa dest a
maneira. Port ant o, eu recomendo fortemente que voc use docst rings para qualquer funo
no-t rivial que voc escreva. O comando pydoc que vem com sua dist ribuio Pyt hon funciona
de forma semelhant e a help() usando docst rings.
Anotaes
Funes possuem out ra funcionalidade avanada chamada anot aes, que so um modo
est iloso de anexar informao adicional para cada um dos parmet ros e t ambm para o valor
de ret orno. Como o int erpret ador Pyt hon no int erpret a est as anot aes (t al funcionalidade
responsabilidade de bibliot ecas de t erceiros), pularemos est a funcionalidade dest a discusso.
Se voc est int eressado em ler mais sobre anot aes, por favor veja a Propost a de Melhoria
do Pyt hon No. 3107.
Sumrio
Vimos vrios aspect os das funes mas not e que no cobrimos t odos os seus aspect os.
Ent ret ant o, cobrimos a maioria das funes de Pyt hon que voc precisar dia aps dia.
E seguida, veremos como usar e criar mdulos de Pyt hon.
s
Mdulos
Contedo

1 Int roduo
2 Arquivos .pyc Byt e-compilados
3 O Comando from .. import
4 O __name__ de um Mdulo
5 Produzindo os Seus Prprios Mdulos
6 A Funo dir
7 Packages
8 Resumo
Introduo
Voc viu como pode reut ilizar cdigos em seu programa at ravs da definio apenas uma vez
de funes. Que t al se voc quisesse reut ilizar um cert o nmero de funes em out ros
programas que voc escrever? Como voc poderia t er adivinhado, a respost a est em
mdulos. Um mdulo basicament e um arquivo cont endo t odas as funes e variveis que
voc definiu.
Para reut ilizar o mdulo em out ros programas, o nome do mdulo deve t er uma ext enso .py.
Um mdulo pode ser importado por um out ro programa pra fazer uso da sua funcionalidade.
Assim t ambm como ns podemos usar a bibliot eca padro de Pyt hon. Primeiro, ns
veremos como ut ilizar os mdulos da bibliot eca padro.
Exemplo:
#!/usr/bin/python
# Nome do arquivo: using_sys.py

import sys

print('Os argumentos da linha de comando so:')
for i in sys.argv:
print(i)

print('\n\nO PYTHONPATH ', sys.path, '\n')
Sa da:
$ python using_sys.py nos somos argumentos
Os argumentos da linha de comando so:
test.py
nos
somos
argumentos


O PYTHONPATH ['C:\\tmp', 'C:\\Python30\\python30.zip',
'C:\\Python30\\DLLs', 'C:\\Python30\\lib', 'C:\\Python30\\lib\\plat-win',
'C:\\Python30', 'C:\\Python30\\lib\\site-packages']
Como Funciona:
Primeiro ns importamos o mdulo sys usando o comando import. Basicament e, isso se t raduz
em ns dizermos a Pyt hon que queremos empregar est e mdulo. O mdulo sys cont m
funcionalidade relacionada ao int erpret ador de Pyt hon e o seu ambient e, ou seja, o syst ema.
Quando Pyt hon execut a o comando import sys, procura pelo mdulo sys.py em um dos
diret rios list ados na sua varivel sys.path. Se o arquivo encont rado, ent o os comandos do
bloco principal (main) do mdulo so execut ados e o mdulo t ornado disponvel para seu
uso. Observe que a inicializao realizada apenas a primeira vez que ns import amos o
mdulo.
A varivel argv no mdulo sys acessada ut ilizando-se a not ao por pont os (dot t ed) ist o
sys.argv. Ela clarament e indica que est e nome part e do mdulo sys. Uma out ra vant agem
dessa abordagem que o nome no colide com qualquer varivel argv usada em seu
programa.
A varivel sys.argv uma lista de st rings (list as (list s) so explicadas em det alhes em um
cap t ulo post erior). Especificament e, sys.argv cont m a list a de argumentos da linha de
comando, ou seja, os argument os que so passados para o seu programa usando a linha de
comando.
Se voc est iver usando uma IDE para escrever e execut ar esses programas, procure por uma
forma de especificar os argument os da linha de comando ao seu programa nos menus.
Aqui, quando ns execut amos python using_sys.py nos somos argumentos ns execut amos
o mdulo using_sys.py com o comando python e as out ras coisas que seguem so
argument os passados ao programa. Pyt hon guarda os argument os da linha de comando na
varivel sys.argv para nosso uso.
Lembre-se, o nome do script que est em execuo sempre o primeiro argument o na list a
sys.argv. assim, nest e caso ns t eremos 'using_sys.py' como sys.argv[0], 'nos' como
sys.argv[1], 'somos' como sys.argv[2] e 'argumentos' como sys.argv[3]. Not e que Pyt hon
comea a cont agem a part ir de 0 e no de 1.
A varivel sys.path cont m a list a de nomes de diret rios de onde os mdulos so import ados.
Observe que a primeira st ring em sys.path est vazia - est a st ring vazia indica que o diret rio
corrent e t ambm part e de sys.path a qual a mesma que a varivel de ambient e
PYTHONPATH. Isso significa que voc pode import ar diret ament e mdulos localizados no diret rio
corrent e. Se no for o caso, voc t er que colocar seu mdulo em um dos diret rios list ados
em sys.path.
Arquivos .pyc Byte-compilados
A import ao de mdulos uma ao relat ivament e cust osa, de modo que Pyt hon realiza
alguns t ruques para t orn-la mais rpida. Uma maneira a criao de arquivos byte-
compilados com a ext enso .pyc que uma forma int ermediria em que Pyt hon t ransforma o
programa (lembre-se da seo de int roduo em Como Pyt hon Funciona?). Est e arquivo .pyc
t il quando voc import ar o mdulo a prxima vez de um programa diferent e - ser muit o
mais rpido pois uma part e do procediment o requerido para a import ao do mdulo j est
feit a. Alm disso, est es arquivos byt e-compilados so independent es da plat aforma.
Not a
Esses arquivos .pyc so usualment e criados no mesmo diret rio dos arquivos .py
correspondent es. Se Pyt hon no t iver permisso para escrever arquivos naquele diret rio,
ent o os arquivos .pyc no sero criados.
O Comando from .. import
Se voc quiser import ar diret ament e a varivel argv no seu programa (para evit ar ficar
digit ando sys. t odas as vezes), ent o voc pode usar o comando from sys import argv. Se
voc quiser import ar t odos os nomes usados no mdulo sys, ent o voc pode usar o oomando
from sys import *. Isso funciona com qualquer mdulo.
Em geral, voc deve evit ar o uso desse comando e, ao invs, ut ilizar o comando import, pois
dessa forma voc evit ar coliso de nomes e seu programa ficar mais leg vel.
O __name__ de um Mdulo
Todo mdulo t em um nome e comandos em um mdulo podem encont r-lo. Isso
convenient e na sit uao part icular em que se proecisa descobrir se o mdulo est sendo
execut ado por si s ou est sendo import ado. Como mencionado ant eriorment e, quando um
mdulo import ado pela primeira vez, o bloco principal (main) daquele mdulo execut ado. N
podemos usar esse conceit o para execut ar o bloco apenas se o programa for usado por si s e
no quando for import ado por out ro mdulo. Isso pode ser alcanado usando o at ribut o
__name__ do mdulo.
Exemplo:
#!/usr/bin/python
# Nome do arquivo: using_name.py

if __name__ == '__main__':
print('Este programa est sendo executado por si s')
else:
print('Eu estou sendo importado de outro mdulo')
Sa da:
$ python using_name.py
Este programa est sendo executado por si s

$ python
>>> import using_name
Eu estou sendo importado de outro mdulo
>>>
Como Funciona:
Todo mdulo em Pyt hon t em o seu __name__ definido e se est e '__main__', isso implica que
o mdulo est sendo execut ado por si s pelo usurio e ns poderemos adot ar as aes
apropriadas.
Produzindo os Seus Prprios Mdulos
A criao de seus prprios mdulos fcil, pois voc j t em feit o isso o t empo t odo! Isso
porque t odo programa em Pyt hon t ambm um mdulo. Voc apenas t em que se assegurar
que possua a ext enso .py. O prximo exemplo deve t ornar isso claro.
Exemplo:
#!/usr/bin/python
# Nome do arquivo: mymodule.py

def sayhi():
print('Ol, este meu mdulo falando.')

__version__ = '0.1'

# Fim de mymodule.py
O cdigo acima um mdulo de amost ra. Como voc pode ver, no exist e nada
part icularment e especial a respeit o dele em comparao com os nossos programas usuais em
Pyt hon. Veremos agora como usar est e mdulo em nossos out ros programas em Pyt hon.
Lembre-se que os mdulos devem ser colocados no mesmo diret rio que o programa que os
import a, ou ent o deve est ar em um dos diret rios list ados em sys.path.
#!/usr/bin/python
# Nome do arquivo: mymodule_demo.py

import mymodule

mymodule.sayhi()
print 'Verso', mymodule.__version__
Sa da:
$ python mymodule_demo.py
Ol, este mymodule falando.
Verso 0.1
Como Funciona:
Not e que ns empregamos a not ao dos pont os para acessar os membros do mdulo.
Pyt hon ut iliza bast ant e a mesma not ao que lhe d a caract er st ica 'Pyt honica' a ela, e modo
que no t emos que ficar aprendendo novas maneiras de fazer as coisas.
Aqui est a verso ut ilizando a sint axe from..import.
#!/usr/bin/python
# Nome do arquivo: mymodule_demo2.py

from mymodule import sayhi, __version__
# Alternativa:
# from mymodule import *

sayhi()
print('Verso', __version__)
A sa da de mymodule_demo2.py a mesma que a sa da de mymodule_demo.py.
Not e que j houvesse um nome __version__ declarado no mdulo que import a mymodule,
haveria uma coliso. Isso alt ament e provvel pois prt ica comum para cada mdulo
declarar-se a sua verso usando esse nome. Da sempre recomendado opt ar pelo comando
import, mesmo se t ornar o seu programa um pouco mais longo.
Zen de Pyt hon
Um dos princ pios-guia de Pyt hon que 'Explicit o melhor do que impl cit o'. Execut e
import this para aprender mais.
A Funo dir
Voc pode usar a funo int erna (built -in) dir para list ar os indet ificadores que um objet o
define. Por exemplo, para um mdulo, os ident ificadores incluem as funes, classes e variveis
definidas naquele mdulo.
Quando voc fornece o nome do mdulo funo dir(), ela ret orna a list a dos nomes
definidos naquele mdulo. Quando nenhum argument o fornecido, ela ret orna a list a de
nomes definidos no mdulo corrent e.
Exemplo:
$ python

>>> import sys # Obtenha a lista de atributos, neste caso, do mdulo sys

>>> dir(sys)
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__package__', '__s
tderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_compact_freelists',
'_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', '
byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle'
, 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix', 'executable',
'exit', 'flags', 'float_info', 'getcheckinterval', 'getdefaultencoding', 'getfil
esystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof',
'gettrace', 'getwindowsversion', 'hexversion', 'intern', 'maxsize', 'maxunicode
', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platfor
m', 'prefix', 'ps1', 'ps2', 'setcheckinterval', 'setprofile', 'setrecursionlimit
', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_in
fo', 'warnoptions', 'winver']

>>> dir() # obtenha a lista dos atributos do mdulo corrente
['__builtins__', '__doc__', '__name__', '__package__', 'sys']

>>> a = 5 # cria uma nova varivel 'a'

>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'a', 'sys']

>>> del a # delete/remove um nome

>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'sys']

>>>
Como Funciona:
Primeiro ns vemos o uso de dir sobre o mdulo import ado. Podemos ver a enorme list a de
at ribut os que ele cont m.
Em seguida, ns vemos a funo dir sem nenhum parmet ro passado a ela. Por padro, ela
ret orna a list a dos at ribut os do mdulo corrent e. Not e que a list a dos mdulos import ados
t ambm faz part e dessa list a.
A fim de observar a ao de dir, ns definimos uma nova varivel e at ribu mos um valor a ela e
ent o verificamos que exist e um valor adicional na list a, com o mesmo nome da varivel. Ns
removemos a varivel/at ribut o do mdulo corrent e usando o comando del e a alt erao
reflet ida novament e na sa da da funo dir.
Uma not a sobre del - est e comando usado para deletar a varivel/nome e depois de
execut ado o comando, nest e caso del a, voce no poder acessar a varivel a - como se ela
nunca t ivesse exist ido ant es.
Not e que a funo dir() funciona para qualquer objet o. Por exemplo, execut e dir(print)
para conhecer os at ribut os da funo print , ou dir(str) para os at ribut os da classe st r.
Packages
Nesse pont o, voc j deve t er comeado a observar a hierarquia da organizao de seus
programas. As variveis usualment e vo dent ro das funes. Funes e variveis globais
usualment e vo dent ro dos mdulos. Que t al se voc quisesse organizar os mdulos? Est e o
moment o em que ent ram em cena as packages (pacot es).
Packages so apenas past as cont endo mdulos com um arquivo __init__.py que indica a
Pyt hon que est a past a especial porque cont m mdulos de Pyt hon.
Vamos dizer que voc quer criar uma package denominada 'world' com as subpackages 'asia',
'africa', et c. e est as subpackages por sua vez cont m mdulos como 'india', 'madagascar', et c.
Est a como voc est rut uraria as past as:
- <alguma pasta presente em the sys.path>/
- world/
- __init__.py
- asia/
- __init__.py
- india/
- __init__.py
- foo.py
- africa/
- __init__.py
- madagascar/
- __init__.py
- bar.py
Packages so apenas uma convenincia para organizar mdulos hierarquicament e. Ns
veremos muit os exemplos disso em bibliot eca padro.
Resumo
Da mesma forma que funes so part es reut ilizveis de programas, os mdulos so
programas reut ilizveis. Packages so uma out ra hierarquia para organizar mdulos. A
bibliot eca padro que vem com Pyt hon represent a um exemplo de t ais conjunt os de packages
e mdulos.
Ns vimos como usar esses mdulos e criar os nossos prprios mdulos.
A seguir, aprenderemos sobre int eressant es conceit os denominados est rut uras de dados.
Estruturas de Dados
Contedo

1 Int roduo
2 List a
2.1 Rpida Int roduo a Objet os e Classes
3 Tupla
4 Dicionrio
5 Sequncias
6 Conjunt os
7 Referncias
8 Mais Sobre St rings
9 Resumo
Introduo
Est rut uras de dados so basicament e isso - so estruturas que podem cont er alguns dados
junt os. Em out ras palavras, elas so ut ilizadas para guardar uma coleo de dados
relacionados ent re si.
Exist em quat ro est rut uras de dados int ernas (built -in) em Pyt hon - list a, t upla, dicionrio e
conjunt o (set ). Ns veremos como usar cada uma delas e de que modo elas nos facilit am a
vida.
Lista
Uma list (list a) uma est rut ura de dados que cont m uma coleo ordenada de it ens, ou
seja, voc pode guardar uma sequncia de it ens em uma list a. Isso fcil de imaginar se voc
pensar em uma list a de compras na qual voc t em uma list a de it ens para comprar, excet o que
voc provavelment e t er cada it em em uma linha separada, ao passo que Pyt hon coloca uma
v rgula ent re eles.
A list a de it ens dever est ar dent ro de colchet es (square bracket s), de modo que Pyt hon
ent ende que voc est especificando uma list a. Uma vez que voc criou a list a, pode adicionar,
remover ou fazer buscas por it ens dela. Desde que ns podemos adicionar e remover it ens,
dizemos que uma list a um t ipo mutvel de dados, ous seja, est e t ipo pode ser alt erado.
Rpida Introduo a Objetos e Classes
Embora eu t enha ret ardado a discusso sobre objet os e classes at agora, uma pequena
explanao t orna-se imediat ament e necessria, t al que voc possa ent ender melhor as list as.
Exploraremos esse t pico em mais det alhes em seu prprio cap t ulo.
Uma list a um exemplo de ut ilizao de objet os e classes. Quando ns usamos a varivel i e
at ribu mos um valor, digamos, int eiro 5 a ela, voc pode raciocinar como se criasse um objet o
(ist o uma inst ncia) i de uma classe (ou seja t ipo) int. De fat o, voc pode ler help(int)
para melhor ent ender isso.
Uma classe pode t er mt odos ou seja funes definidas para uso com respeit o unicament e
quela classe. Voc pode usar essas peas de funcionalidade apenas quando t em um objet o
daquela classe. Por exemplo, Pyt hon fornece um mt odo append para a classe list, o que
permit e a voc adicionar um it em ao final da list a. Por exemplo, minhalista.append('um item')
adicionar aquela st ring ao final da list a minhalista. Not e o emprego da not ao dos pont os
para acessar mt odos dos objet os.
Uma classe pode t ambm possuir campos que no so nada mais do que variveis definidas
para uso com respeit o unicament e quela classe. Voc pode ut ilizar aquelas variveis/nomes
apenas quando t em um objet o daquela classe. Campos so t ambm acessados com a
not ao dos pont os, por exemplo, minhalista.campo.
Exemplo:
#!/usr/bin/python
# Nome do arquivo: using_list.py

# Esta a minha lista de compras
shoplista = ['ma', 'manga', 'cenoura', 'banana']

print('Eu tenho', len(shoplista), 'itens para comprar.')

print('Estes itens so:', end=' ')
for item in shoplista:
print(item, end=' ')

print('\nTambm tenho que comprar arroz.')
shoplista.append('arroz')
print('Minha lista de compras agora', shoplista)

print('Vou colocar a minha lista em ordem agora')
shoplista.sort()
print('A minha lista ordenada ', shoplista)

print('O primeiro item que comprarei ', shoplista[0])
olditem = shoplista[0]
del shoplista[0]
print('Eu comprei o', olditem)
print('Minha lista de compras agora', shoplista)
Sa da:
$ python using_list.py
Eu tenho 4 itens para comprar.
Estes itens so: ma manga cenoura banana
Tambm tenho que comprar arroz.
Minha lista de compras agora ['ma', 'manga', 'cenoura', 'banana', 'arroz']
Vou colocar a minha lista em ordem agora
A minha lista ordenada ['arroz', 'banana', 'cenoura', 'ma', 'manga' ]
O primeiro item que comprarei arroz
Eu comprei o arroz
Minha lista de compras agora 'banana', 'cenoura', 'ma', 'manga' ]
Como Funciona:
A varivel shoplista uma list a de compras para algum que est indo ao mercado. Em
shoplista ns guardamos st rings do nomes dos it ens a serem comprados, mas voc pode
adicionar qualquer espcie de objeto a uma list a, incluindo nmeros e at mesmo out ras list as.
Ns t ambm empregamos o lao for..in para it erar sobre os it ens da list a. Agora voc deve
t er percebido que uma list a t ambm uma sequncia. A especialidade das sequncias ser
discut ida em uma seo post erior.
Observe o uso da palavra-chave end como argument o na funo print, para indicar que ns
queremos t erminar a sa da com um espao, ao invs da cost umeira quebra-de-linha.
Em seguida, ns adicionamos um it em list a usando o mt odo append do objet o list a, como j
foi discut ido ant es. Ent o, ns verificamos que o it em foi efet ivament e acrescent ado list a
at ravs da impresso do cont edo da list a, obt ida simplesment e passando a list a ao comando
print, que a imprime sem problemas.
Da ns ordenamos a list a por meio do mt odo sort do objet o list a. import ant e compreender
que est e mt odo afet a a a prpria list a e que no ret orna uma list a modificada - isso
diferent e da maneira pela qual a st ring funciona. o que ns queremos salient ar quando
dizemos que as list as so mutveis e as st rings so imutveis.
A seguir, quando ns t erminamos de comprar um it em no mercado, queremos ret ir-lo da list a.
Alcanamos isso por meio do comando del. Aqui ns mencionamos qual o it em da list a que
desejamos suprimir e o comando del o remove da list a para ns. Especificamos que queremos
remover o primeiro it em da list a ent o usamos del shoplist[0] (lembre-se que Pyt hon
comea a cont agem a part ir do 0.)
Se voc quiser conhecer t odos os mt odos definidos para o objet o list a, veja help(list) para
os det alhes.
Tupla
Tuplas (t uples) so exat ament e como list as, excet o que so imut veis, como as st rings, ist o
, voc no pode modificar t uplas. Tuplas so definidas especificando it ens separados por
v rgulas dent ro de um par de parnt eses. As t uplas so cost umeirament e usadas em casos
em que um comando ou uma funo definida pelo usurio pode segurament e assumir que
uma coleo de valores, ou seja, a t upla de valores no ser alt erada.
Exemplo:
#!/usr/bin/python
# Nome do arquivo: using_tuple.py

zoo = ('lobo', 'elefante', 'pinguim')
print('O Nmero de animais no zoo ', len(zoo))

novo_zoo = ('macaco', 'golfinho', zoo)
print('O Nmero de animais no novo zoo ', len(novo_zoo))
print('Todos os animais no novo zoo so', novo_zoo)
print('Os animais trazidos do antigo zoo so', novo_zoo[2])
print('O ltimo animal trazido do antigo zoo ', novo_zoo[2][2])
Out put :
$ python using_tuple.py
O Nmero de animais no zoo 3
O Nmero de animais no novo zoo 3
Todos os animais no novo zoo so ('macaco', 'golfinho', ('lobo', 'elefante', 'pinguim'))
Os animais trazidos do antigo zoo so ('lobo', 'elefante', 'pinguim')
O ltimo animal trazido do antigo zoo pinguim
Como Funciona:
A varivel zoo refere-se a uma t upla de it ens. Ns vemos que a funo zoo pode ser ut ilizada
para se obt er o compriment o da t upla. Isso t ambm indica que a t upla t ambm uma
sequncia.
Ns est amos mudando aqueles animais para um novo zoo, uma vez que o ant igo est para
ser fechado. Dessa forma, a t upla novo_zoo cont m alguns animais que j est avam l,
junt ament e com aqueles t razidos do velho zoo. De volt a a realidade, observe que uma t upla
dent ro de out ra t upla no perde a sua indent idade.
Podemos acessar os it ens em uma t upla especificando a posio do it em dent ro de um par de
colchet es exat ament e como ns fizemos para list as. Esse chamado operador de indexao.
Ns acessamos o t erceiro it em em novo_zoo pela especificao novo_zoo[2] e acessamos o
t erceiro it em dent ro do t erceiro it em na t upla novo_zoo especificando novo_zoo[2][2]. muit o
simples uma vez que voc domine o jeit o.
s
Tuplas com 0 ou 1 it em
Uma t upla vazia const ru da com um par de parnt eses como vazia = (). Ent ret ant o,
com um nico it em j no t o simples. Voc deve especificar usando uma v rgula em
seguida ao primeiro (e nico) it em, t al que Pyt hon possa diferenciar ent re uma t upla e um
par de parnt eses que cercam uma expresso, ou seja, voc t em que especificar
singleton = (2 , ), se quiser uma t upla cont endo o it em 2.
Not a para programadores em Perl
Uma list a dent ro de uma list a no perde sua ident idade, list as no so "achat adas", como
em Perl. O mesmo se aplica a uma t upla dent ro de uma t upla, ou uma t upla em uma list a,
ou uma list a em uma t upla, et c. Do pont o de vist a de Pyt hon, so apenas objet os
alocados usando um out ro objet o, apenas isso.
Dicionrio
Um dicionrio (dict ionary) como uma agenda de endereos na qual voc pode encont rar ou
endereo ou det alhes de cont at o de uma pessoa, conhecendo apenas o nome dela, ist o ,
associamos as keys (chaves) (nome) com values (valores) (det alhes). Not e que a key deve
ser nica, da mesma forma que voc no poder encont rar a informao corret a se houverem
duas pessoas com exat ament e o mesmo nome.
Observe que voc pode ut ilizar soment e objet os imut veis (como st rings) como keys de um
dicionrio, mas pode usar objet os imut veis e mut veis como values do dicionrio. Isso
basicament e se t raduz em que voc deve usar apenas objet os simples como keys.
Pares de keys e values so especificados em um dicionrio pela not ao d = {key1 : value1,
key2 : value2 }. Observe que os pares key/value est o separados por uma v rgula e t odo o
conjunt o est dent ro de um par de chaves.
Lembre-se que os pares key/value em um dicionrio no est o de forma alguma ordenados. Se
quiser um ordem part icular, voc mesmo t er que orden-los ant es de us-los.
Os dicionrios que voc ut ilizar so inst ncias/objet os da classe dict.
Exemplo:
#!/usr/bin/python
# Nome do arquivo: using_dict.py

# 'ab' diminutivo para 'a'ddress'b'ook

ab = { 'Swaroop' : 'swaroop@swaroopch.com',
'Larry' : 'larry@wall.org',
'Matsumoto' : 'matz@ruby-lang.org',
'Spammer' : 'spammer@hotmail.com'
}

print("Swaroop's address is", ab['Swaroop'])

# Deletando um par key/value
del ab['Spammer']

print('\nThere are {0} contacts in the address-book\n'.format(len(ab)))

for name, address in ab.items():
print('Contact {0} at {1}'.format(name, address))

# Adiconando um par key/value
ab['Guido'] = 'guido@python.org'

if 'Guido' in ab: # OU ab.has_key('Guido')
print("\nGuido's address is", ab['Guido'])
Sa da:
$ python using_dict.py
Swaroop's address is swaroop@swaroopch.com

There are 3 contacts in the address-book

Contact Swaroop at swaroop@swaroopch.com
Contact Matsumoto at matz@ruby-lang.org
Contact Larry at larry@wall.org

Guido's address is guido@python.org
Como Funciona:
Ns criamos um dicionrio ab usando a not ao j discut ida. Ent o acessamos os pares
key/value especificando a key usando o operador de indexao como discut ido no cont ext o de
list as e t uplas. Observe a sint axe simples.
Ns podemos delet ar os pares key/value usando nosso velho amigo - o comando del.
Simplesment e especificamos o dicionrio o operador de indexao para a key a ser removida e
passamos t udo ao comando del. No h a necessidade de conhecer o value correspondent e
key para est a operao.
Em seguida, ns acessamos cada par key/value usando o mt odo items do dicionrio, o qual
ret orna uma list a de t uplas, em que cada t upla cont m um par de it ens - a key seguida por um
value. Ns recuperamos esse par e o at ribu mos as variveis name e address
correspondent ement e para cada par, usando o lao de for..in e ent o imprimimos esses
valores no bloco de for.
Podemos adicionar novos pares key/value, simplesment e empregando o operador de
indexao para acessar a key e at ribuirmos aquele value, como fizemos para Guido no caso
acima.
N podemos verificar se um par key/value exist e, usando o operador in ou mesmo o mt odo
has_key da classe dict. Voc pode ver a document ao para a list a complet a de mt odos da
classe dict, usando help(dict).
Argument os em Keyword (palavras-chave) e Dicionrios
Em um t pico dist int o, se voc t iver empregado argument os em keywords em suas
funes, voc j usou dicionrios! Pense um pouco sobre isso - o par key/value
especificado por voc na list a de parmet ros da definio da funo e quando voc
acessa variveis dent ro de sua funo, t rat a-se apenas de uma acesso a key de um
dicionrio (que chamado de tabela de smbolos em t erminologia de compiladores).
Sequncias
List as, t uplas, st rings e arquivos so exemplos de sequncias, mas o que as sequncias t em
de t o especial? Duas das principais caract er st icas de uma sequncia so a operao de
indexao'que nos permite recuperarmos diretamente um item particular e a operao
de slicing (fat iament o) que nos permit e recuperarmos uma fat ia de uma sequncia, ou seja,
uma part e da sequncia.
Exemplo:
#!/usr/bin/python
# Nome do arquivo: seq.py

shoplist = ['apple', 'mango', 'carrot', 'banana']
name = 'swaroop'

# Operao de Indexao ou 'Subscrio'
print('Item 0 is', shoplist[0])
print('Item 1 is', shoplist[1])
print('Item 2 is', shoplist[2])
print('Item 3 is', shoplist[3])
print('Item -1 is', shoplist[-1])
print('Item -2 is', shoplist[-2])
print('Character 0 is', name[0])

# Slicing (fatiamento) sobre uma lista
print('Item 1 to 3 is', shoplist[1:3])
print('Item 2 to end is', shoplist[2:])
print('Item 1 to -1 is', shoplist[1:-1])
print('Item start to end is', shoplist[:])

# Slicing (fatiamento) sobre uma string
print('characters 1 to 3 is', name[1:3])
print('characters 2 to end is', name[2:])
print('characters 1 to -1 is', name[1:-1])
print('characters start to end is', name[:])
Sa da:
$ python seq.py
Item 0 is apple
Item 1 is mango
Item 2 is carrot
Item 3 is banana
Item -1 is banana
Item -2 is carrot
Character 0 is s
Item 1 to 3 is ['mango', 'carrot']
Item 2 to end is ['carrot', 'banana']
Item 1 to -1 is ['mango', 'carrot']
Item start to end is ['apple', 'mango', 'carrot', 'banana']
characters 1 to 3 is wa
characters 2 to end is aroop
characters 1 to -1 is waroo
characters start to end is swaroop
Como Funciona:
Primeirament e, ns vemos como ut iizar os ndices para obt er it ens individuais de uma
sequncia. Isso t ambm conhecido como operao de subscrio. Quando voc especifica
um nmero dent ro de colchet es a uma sequncia, como most rado acima, Pyt hon ir recuperar
para voc o it em correspondent e aquela posio na sequncia. Lembre-se que Pyt hon
comea a cont agem dos nmeros a part ir do 0. Da , shoplist[0] ret orna o primeiro it em e
shoplist[3] ret orna o quart o it em na sequncia shoplist.
O ndice pode t ambm ser um nmero negat ivo, em cujo caso, a posio calculada a part ir
do fim da sequncia. Assim, shoplist[-1] refere-se ao lt imo it em da sequncia e shoplist[-
2] recuoera o penlt imo it em da sequncia.
A operao de slicing empregada especificando-se o nome da sequncia seguido de um par
opcional de nmeros separados por 'dois pont os' dent ro de colchet es. Not e que isso bem
similar a operao de indexao que voc vem usando at agora. Lembre-se que os nmeros
so opcionais mas o 'dois pont os' no .
O primeiro nmero (ant es do 'dois pont os') na operao de slicing refere-se a posio de onde
a fat ia comea e o segundo nmero (depois do 'dois pont os') indica onde a fat ia t erminar. Se
o primeiro nmero no for especificado, Pyt hon comear no in cio da sequncia. Se o
segundo nmero no exist ir, Pyt hon t erminar no final da sequncia. Not e que a fat ia
ret ornada comea na posio de in cio e t ermina imediat ament e ant es da posio do fim, ou
seja, a posio de in cio inclu da, mas a posio do fim exclu da na fat ia da sequncia.
Ent o, shoplist[1:3] ret orna uma fat ia de uma sequncia que comea na posio 1, inclui a
posio 2 mas para na posio 3 e assim uma fatia de dois it ens ret ornada. Similarment e,
shoplist[:] ret orna uma cpia da sequncia t oda.
Voc pode t ambm efet uar slicing com nmeros negat ivos. Os nmeros negat ivos so usados
para posies a part ir do fim da sequncia. Por exemplo, shoplist[:-1] ret ornar uma fat ia da
sequncia que exclui o lt imo it em da sequncia mas cont m t odo o rest o dela.
Experiment e vrias combinaes de especificaes de slicing usando int erat ivament e o
int erpret ador de Pyt hon, ou seja, o prompt , de modo que voc possa ver os result ados
imediat ament e. Uma grande coisa a respeit o de sequncias e que voc pode acessar t uplas,
list as e st rings t odas da mesma maneira!
Conjuntos
Conjunt os (Set s) so colees no ordenadas de objet os simples. Eles so usados quando a
exist ncia de um objet o em uma coleo mais import ant e do que a ordem em que est ou o
nmero de vezes em que ocorre.
Usando set s, voc pode t est ar para pert enciment o a um conjunt o, verificar se um conjunt o
um subconjunt o de out ro, encont rar a int erseo ent re dois conjunt os, e assim por diant e.
>>> bri = set(['brasil', 'russia', 'india'])
>>> 'india' in bri
True
>>> 'usa' in bri
False
>>> bric = bri.copy()
>>> bric.add('china')
>>> bric.issuperset(bri)
True
>>> bri.remove('russia')
>>> bri & bric # OR bri.intersection(bric)
{'brasil', 'india'}
Como Funciona:
O exemplo razoavelment e aut o-explicat ivo, pois envolve t eoria bsica de conjunt os
ensinada na escola.
Referncias
Quando voc cria um objet o e o at ribui a uma varivel, est a apenas se refere ao objet o e no
represent a o objet o em si mesmo! Ist o , o nome da varivel apont a para aquela part e da
memria do seu comput ador na qual o objet o est armazenado. Isso chamado vinculao
(binding) do nome ao objet o.
Em geral voc no precisa ficar preocupado com isso, mas exist e um efeit o sut il devido a
referncias ao qual voc precosa ficar at ent o:
Exemplo:
#!/usr/bin/python
# Nome do arquivo: reference.py

print('Atribuio Simples')
shoplist = ['apple', 'mango', 'carrot', 'banana']
mylist = shoplist # mylist apenas um outro nome apontando para o mesmo objeto!

del shoplist[0] # Eu comprei o primeiro item , ento eu o removo da lista
&nbssp;
print('shoplist is', shoplist)
print('mylist is', mylist)
# note como tanto shoplist e mylist ambas imprimem a mesma lista, sem 'apple', confirmando que apontam para o mesmo objeto.

print('Copie por meio de uma fatia completa')
mylist = shoplist[:] # efetue uma cpia por meio de uma fatia completa
del mylist[0] # remova o primeiro item

print('shoplist is', shoplist)
print('mylist is', mylist)
# note que agora as duas listas so distintas
Sa da:
$ python reference.py
Atribuio Simples
shoplist is ['mango', 'carrot', 'banana']
mylist is ['mango', 'carrot', 'banana']
Copie por meio de uma fatia completa
shoplist is ['mango', 'carrot', 'banana']
mylist is ['carrot', 'banana']
Como Funciona:
A maior part e da explicao est dispon vel nos prprios coment rios.
O que voc precisa lembrar que quiser fazer uma cpia de uma list a ou t ais espcies de
sequncias ou objet os complexos (no objetos simples como int eiros), ent o voc deve ut ilizar
a operao de slicing para efet uar uma cpia. Se voc apenas at ribuir o nome da varivel a
out ro nome, ent o ambos se referiro ao mesmo objet o e isso pode ser um problema se voc
no for cuidadoso.
Not a para programadores em Perl
Lembre-se que um comando de at ribuio para list as no cria uma cpia. Voc dever
usar a operao de slicing para efet uar uma cpia da sequncia.
Mais Sobre Strings
Ns j discut imos st rings em det alhes ant es. O que mais h para se conhecer? Bem, voc
sabia que st rings so t ambm objet os e que t em mt odos que fazem de t udo, desde verificar
part es de uma st ring at ret irar os espaos em branco!
As st rings que voc usa em seu programa so t odas objet os da classe str. Alguns mt odos
t eis dessa classe so demonst rados no prximo exemplo. Para uma list a complet a de t ais
mt odos, veja em help(str).
Exemplo:
#!/usr/bin/python
# Nome do arquivo: str_methods.py

name = 'Swaroop' # Este um objeto string

if name.startswith('Swa'):
print('Sim, a string comea com "Swa"')

if 'a' in name:
print('Sim, ela contm a string "a"')

if name.find('war') != -1:
print('Sim, ela contm a string "war"')

delimitador = '_*_'
mylist = ['Brasil', 'Rssia', 'ndia', 'China']
print(delimitador.join(mylist))
Out put :
$ python str_methods.py
Sim, a string comea com "Swa"
Sim, ela contm a string "a"
Sim, ela contm a string "war"
Brasil_*_Rssia_*_ndia_*_China
Como Funciona:
Aqui, ns vemos um bocado de mt odos da st ring em ao. O mt odo startswith usado
para descobrir se a st ring comea com uma dada st ring. O operador in usado para verificar
se uma dada st ring uma part e de uma st ring.
O mt odo find usado para achar a posio de uma dada st ring em uma st ring ou ret orna -1
se no for bem sucedido em achar a subst ring. A classe str t em t ambm um elegant e mt odo
para join os it ens de uma sequncia, com a st ring at uando como delimit ador ent re cada it em
da sequncia e ret orna uma st ring muit o maior produzida com isso.
Resumo
Ns esxploramos det alhadament e as vrias est rut uras int ernas (built -in) de Pyt hon. Est as
est rut uras sero essenciais para escrever programas de um t amanho razovel.
Agora que ns j t emos sob cont role o bsico de Pyt hon, veremos a seguir como projet ar e
escrever programas do mundo real em Pyt hon.
Resoluo de Problemas
Ns exploramos vrias part es da linguagem Pyt hon e agora daremos uma olhada em como
essas part es se ajust am ent re si, projet ando e escrevendo um programa que faz algo t il. A
idia aprender a escrever o seu prprio script em Pyt hon.
Contedo

1 O Problema
2 A Soluo
3 Segunda Verso
4 Terceira Verso
5 Quart a Verso
6 Mais Refinament os
7 O Processo de Desenvolviment o de Soft ware
8 Resumo
O Problema
O problema "Eu desejo escrever um programa que cria um backup de todos os meus
arquivos importantes"
Embora esse seja um problema simples, no exist e informao suficient e para que possamos
dar in cio a uma soluo. Um pouco mais de anlise necessria. Por exemplo, como
poder amos especificar quais os arquivos cujo backup deveria ser feit o? Como eles est o
alocados? Onde eles est o alocados?
Depois de analisarmos apropriadament e o problema, ns projet amos o nosso programa. Ns
elaboramos uma list a de coisas a respeit o de como o nosso programa deveria operar. Nest e
caso em part icular, criei a list a que se segue, com base em como eu quero que ele funcione. Se
voc desenvolver o projet o, poder surgir com out ro t ipo de anlise, uma vez que cada pessoa
t em o seu prprio modo de fazer as coisas, o que perfeit ament e leg t imo.

1. Os arquivos e diret rios objet o do backup est o especificados em uma list a.
2. O backup deve ser colocado em um diret rio principal de backup.
3. O backup deve ser colocado em uma arquivo do t ipo zip.
4. O nome do arquivo zip a dat a e a hora corrent es.
5. Usaremos o comando zip dispon vel por default em qualquer dist ribuio Linux/Unix
padro. Os usurios de Windows podem inst alar da pgina do projet o e adicionar
C:\Arquivos de Programas\GnuWin32\bin a varivel de ambient e do sist ema PATH, de
modo anlogo ao que fizemos para que o comando pyt hon fosse reconhecido. Not e que
voc pode ut ilizar qualquer comando de arquivament o que desejar, desde que possua
uma int erface at ravs de linha de comando, de forma que possamos passar argument os
a ele por meio de nosso script .
A Soluo
Uma vez que o projet o de nosso programa encont ra-se agora razoavelment e est vel,
podemos escrever o cdigo que represent a uma implement ao de nossa soluo.
#!/usr/bin/python
# Nome do arquivo: backup_ver1.py

import os
import time

# 1. Os arquivos e os diretrios a sofrerem backup esto especificados em uma lista.
origem = ['"C:\\Meus Documentos"', 'C:\\Code']
# Note que ns tivemos que usar aspas duplas dentro da string devido aos nomes com espaos dentro dela.

# 2. O backup deve ser colocado em um diretrio de backup principal.
dir_alvo = 'E:\\Backup' # Lembre-
se de alterar para aquele que voc estiver utilizando.

# 3. O backup deve ser colocado em uma arquivo do tipo zip.
# 4. O nome do arquivo zip a data e a hora correntes.
alvo = dir_alvo + os.sep + time.strftime('%Y%m%d%H%M%S') + '.zip'

# 5. Usamos o comando zip para colocar os arquivos em um arquivo zip.
comando_zip = "zip -qr {0} {1}".format(alvo, ' '.join(origem))

# Execute o backup
if os.system(comando_zip) == 0:
print('Backup bem-sucedido em', alvo)
else:
print('Backup FALHOU')
Sa da:
$ python backup_ver1.py
Backup bem-sucedido em E:\Backup\20080702185040.zip
Agora, ns nos encont ramos em uma fase de t est es, quando ns verificamos que o nosso
programa funciona de forma apropriada. Se ele no se comport ar como esperado, ent o ns
t emos que debugar o nosso programa, ou seja, remover os bugs (erros) do programa.
Se o programa acima no funcionar para voc, coloque um print(comando zip)
imediat ament e ant es da chamada para os.system e execut e o programa. Agora copie/cole o
comando_zip impresso no 'prompt ' do shell e veja se ele execut a adequadament e por si
mesmo. Se o comando falhar, verifique no manual do comando zip o que poderia est ar errado.
Se o comando for bem sucedido, ent o verifique se o programa em Pyt hon corresponde
exat ament e ao prograna escrit o acima.
Como funciona:
Voc not ar como ns convert emos o nosso projet o em um procediment o passo-a-passo.
Ns fazemos uso dos mdulos os e time, ant es de t udo import ando-os. Ent o, ns
especificamos os arquivos e diret rios cujo backup deve ser realizado na list a t t >origem</t t >.
O diret rio alvo onde ns armazenamos t odos os arquivos do backup e est e est
especificado pela varivel dir_alvo. O nome do arquivo zip que iremos criar a dat a e hora
corrent es, os quais ns obt emos ut ilizando a funo time.strftime(). Ele receber t ambm a
ext enso zip e ser post o no diret rio dir_alvo.
Observe o uso da varivel os.sep - est a fornece o separador de diret rios de acordo com o
sist ema operacional, ou seja, ser '/' em Linux, Unix, ser '\\' em Windows e ':' em Mac OS.
O uso de os.sep, ao invs desses caract eres diret ament e, t ornar o nosso programa port vel
e capaz de operar sob aqueles sist emas.
e capaz de operar sob aqueles sist emas.
A funo time.strftime() recebe uma especificao t al como a que usamos no programa
acima. A especificao %Y ser subst it u da pelo ano sem o sculo. A especificao %m ser
subst it u da pelo mes como um nmero decimal ent re 01 e 12 e assim por diant e. A list a
complet a de t ais especificaes pode ser encont rada no Pyt hon Reference Manual(Manual de
Referncia de Pyt hon).
Ns criamos o nome do arquivo alvo zip ut ilizando o operador adio, o qual concatena as
st rings, ist o , combina conjunt ament e as st rings e ret orna uma nova st ring. Ent o, ns
criamos uma st ring comando_zip que cont m o comando que iremos execut ar. Voc pode
verificar se esse comando funciona, execut ando-o no shell (t erminal de Linux ou no 'prompt ' do
DOS).
Ao comando zip que ns est amos usando, so passadas algumas opes e parmet ros. A
opo The -q empregada para indicar que o comando zip deve operar de forma silenciosa
(quiet ). A opo -r especifica que o comando zip deve t rabalhar recursivament e sobre os
diret rios, ou seja, dever incluir t odos os subdiret rios e arquivos. As duas opes so
combinadas e especificadas como -qr. As opes so seguidas pelo nome de um arquivo zip a
ser criado seguido pela list a de arquivos e diret rios a realizar o backup. Ns convert emos a
list a origem em uma st ring, usando o mt odo join de st rings, o qual j vimos como empregar.
Ent o, ns finalment e executamos o comando usando a funo os.system, que execut a o
comando como se o est ivesse fazendo pelo sistema operacional, ist o , no shell - ele ret orna 0
se o comando foi bem sucedido, ret ornando um nmero de erro, em caso cont rrio.
Dependendo do result ado do comando, ns imprimimos a mensagem apropriada se o backup
falhou ou se foi bem sucedido.
Ent o isso, ns criamos um script para realizar um backup de nossos arquivos import ant es!
Not a aos Usurios de Windows
Ao invs de sequncias de escape com duplo 'backslash' voc pode t ambm eepregar
raw st rings. Por exemplo, use 'C:\\Documentos' ou r'C:\Documentos'. Ent ret ant o, no
ut ilize 'C:\Documentos', uma vez que voc vai acabar encont rando uma sequncia
desconhecida de escape \D.
Agora que ns t emos um script de backup operacional, podemos us-lo em qualquer sit uao
em que desejamos obt er um backup de arquivos. Os usurios de Linux/Unix so aconselhados
a empregar o met odo_execut avel como discut ido ant eriorment e de modo que possam
execut ar o script de backup a qualquer moment o e em qualquer lugar. Est a chamada a fase
de operao ou de emprego do soft ware.
O programa acima funciona apropriadament e, mas (usualment e) os primeiros programas no
operam exat ament e como voc espera. Por exemplo, poderiam haver problemas se voc no
t ivesse projet ado o programa adequadament e ou se voc t ivesse comet ido um erro ao digit ar
o cdigo, et c. Apropriadament e, voc t er que volt ar fase de projet o ou t er que 'debugar' o
seu programa.
Segunda Verso
A primeira verso do nosso script funciona. Ent ret ant o, ns podemos implement ar cert os
refinament os a ele, de modo a que possa funcionar ainda melhor dia aps dia. Est a chamada
a fase de manut eno do soft ware.
Um dos refinament os que eu achei que seria t il um mecanismo mais adequado de
at ribuio do nome para os arquivos - usar a hora como o nome do arquivo dent ro de um
diret rio com a data corrent e como um diret rio no diret rio principal de backup. A primeira
vant agem que os seus backups est aro armazenados de uma forma hierrquica e assim
muit o mais fcil de gerenciar. A segunda vant agem que o compriment o dos nomes dos
arquivos ser muit o menor. A t erceira vant agem que diret rios separados o ajudaro a
facilment e verificar se voc j realizou o backup do dia, uma vez que o diret rio s ser criado
se voc t iver efet uado o backup daquele dia.
#!/usr/bin/python
# Nome do arquivo: backup_ver2.py

import os
import time

# 1. Os arquivos e os diretrios cujo backup ser efetuado estaro especificados em uma lista.
origem = ['"C:\\Meus Documentos"', 'C:\\Code']
# Note que ns tivemos que usar aspas duplas dentro da string devido aos nomes com espaos dentro dela.

# 2. O backup deve ser colocado em um diretrio de backup principal.
dir_alvo = 'E:\\Backup' # Lembre-
se de alterar para aquele que voc estiver utilizando.

# 3. O backup deve ser colocado em uma arquivo do tipo zip.
# 4. O dia corrente o nome do subdiretrio no diretrio principal.
hoje = dir_alvo + os.sep + time.strftime('%Y%m%d')
# A hora corrente o nome do arquivo zip
agora = time.strftime('%H%M%S')

# Crie o diretrio se ainda no estiver l
if not os.path.exists(hoje):
os.mkdir(hoje) # crie diretrio
print('Bem-Sucedida Criao do Diretrio', hoje)

# O nome do arquivo zip
alvo = hoje + os.sep + agora + '.zip'

# 5. Usamos o comando zip para colocar os arquivos em um arquivo zip
comando_zip = "zip -qr {0} {1}".format(alvo, ' '.join(origem))

# Execute o backup
if os.system(comando_zip) == 0:
print('Backup Bem-Sucedido em', alvo)
else:
print('Backup FALHOU')
Sa da:
$ python backup_ver2.py
Bem-Sucedida Criao do Diretrio E:\Backup\20080702
Backup Bem-Sucedido em E:\Backup\20080702\202311.zip

$ python backup_ver2.py
Backup Bem-Sucedido em E:\Backup\20080702\202325.zip
Como funciona:
A maior part e do programa permanece a mesma. As alt eraes so aquelas nas quais
verificamos se exist e um diret rio com o dia corrent e como nome dent ro do diret rio principal
ut ilizando a funo os.exists. Se no exist ir, ns o criamos por meio da funo os.mkdir.
Terceira Verso
A segunda verso funciona muit o bem quando eu efet uo muit os backups, mas quando h um
nmero muit o grande de backups, eu est ou achando dif cil diferenciar para que razo so os
backups! Por exemplo, eu poderia t er feit o algumas alt eraes significat ivas a um programa ou
apresent ao, ent o eu gost aria a razo para aquelas alt eraes ao nome do arquivo zip. Isso
pode ser facilment e obt ido associando-se um coment rio fornecido pelo usurio ao nome do
arquivo zip.
Not a
O programa a seguir no funciona, ent o no precisa ficar alarmado, por favor acompanhe
a discusso, pois nela exist e uma lio.
#!/usr/bin/python
# Nome do arquivo: backup_ver3.py

import os
import time

# 1. Os arquivos e os diretrios cujo backup ser efetuado estaro especificados em uma lista.
origem = ['"C:\\Meus Documentos"', 'C:\\Code']
# Note que ns tivemos que usar aspas duplas dentro da string devido aos nomes com espaos dentro dela.

# 2. O backup deve ser colocado em um diretrio de backup principal.
dir_alvo = 'E:\\Backup' # Lembre-
se de alterar para aquele que voc estiver utilizando.

# 3. O backup deve ser colocado em uma arquivo do tipo zip.
# 4. O dia corrente o nome do subdiretrio no diretrio principal.
hoje = dir_alvo + os.sep + time.strftime('%Y%m%d')
# A hora corrente o nome do arquivo zip
agora = time.strftime('%H%M%S')

# Receba um comentrio do usurio para criar o nome do arquivo zip
coment = input('Entre com um comentrio --> ')
if len(coment) == 0: # verifique se entrou um comentrio
alvo = hoje + os.sep + agora + '.zip'
else:
alvo = hoje + os.sep + agora + '_' +
coment.replace(' ', '_') + '.zip'

# Crie o diretrio se ainda no estiver l
if not os.path.exists(hoje):
os.mkdir(hoje) # crie diretrio
print('Bem-Sucedida Criao do Diretrio', hoje)

# 5. Usamos o comando zip para colocar os arquivos em um arquivo zip
comando_zip = "zip -qr {0} {1}".format(alvo, ' '.join(origem))

# Execute o backup
if os.system(comando_zip) == 0:
print('Backup Bem-Sucedido em', alvo)
else:
print('Backup FALHOU')
Sa da:
$ python backup_ver3.py
File "backup_ver3.py", line 25
alvo = hoje + os.sep + agora + '_' +
^
SyntaxError: invalid syntax
Como (no) funciona:
Este programa no funciona! Pyt hon est dizendo que exist e um erro de sint axe o que
significa que o script no sat isfaz a est rut ura que Pyt hon espera encont rar. Quando ns
observamos o erro dado por Pyt hon, ele t ambm nos apont a o local onde det et ou o erro.
Ent o ns comeamos a debugar o nosso programa a part ir daquela linha.
Mediant e uma observao mais cuidadosa, ns verificamos que a nica linha lgica foi dividida
em duas linhas f sicas, mas ns no especificamos que essas duas linhas f sicas est o
conect adas uma a out ra. Basicament e, Pyt hon encont rou o operador de adio (+) sem
qualquer operando naquela linha lgica e da no sabe como prosseguir. Lembre-se que ns
podemos especificar que a linha lgica cont inua na prxima linha f sica at ravs do uso de um
'backslash' no final da linha f sica. Assim, ns efet uamos essa correo no nosso programa. A
correo do programa quando ns encont ramos erros denominada consert o de bugs.
Quarta Verso
#!/usr/bin/python
# Nome do arquivo: backup_ver4.py

import os
import time

# 1. Os arquivos e os diretrios cujo backup ser efetuado estaro especificados em uma lista.
origem = ['"C:\\Meus Documentos"', 'C:\\Code']
# Note que ns tivemos que usar aspas duplas dentro da string devido aos nomes com espaos dentro dela.

# 2. O backup deve ser colocado em um diretrio de backup principal.
dir_alvo = 'E:\\Backup' # Lembre-
se de alterar para aquele que voc estiver utilizando.

# 3. O backup deve ser colocado em uma arquivo do tipo zip.
# 4. O dia corrente o nome do subdiretrio no diretrio principal.
hoje = dir_alvo + os.sep + time.strftime('%Y%m%d')
# A hora corrente o nome do arquivo zip
agora = time.strftime('%H%M%S')

# Receba um comentrio do usurio para criar o nome do arquivo zip
coment = input('Entre com um comentrio --> ')
if len(coment) == 0: # verifique se entrou um comentrio
alvo = hoje + os.sep + agora + '.zip'
else:
alvo = hoje + os.sep + agora + '_' +\
coment.replace(' ', '_') + '.zip'

# Crie o diretrio se ainda no estiver l
if not os.path.exists(hoje):
os.mkdir(hoje) # crie diretrio
print('Bem-Sucedida Criao do Diretrio', hoje)

# 5. Usamos o comando zip para colocar os arquivos em um arquivo zip
comando_zip = "zip -qr {0} {1}".format(alvo, ' '.join(origem))

# Execute o backup
if os.system(comando_zip) == 0:
print('Backup Bem-Sucedido em', alvo)
else:
print('Backup FALHOU')
Sa da:
$ python backup_ver4.py
Entre com um comentrio --> novos exemplos adicionados
Backup Bem-Sucedido em E:\Backup\20080702\202836_novos exemplos_adicionados.zip

$ python backup_ver4.py
Entre com um comentrio -->
Backup Bem-Sucedido em E:\Backup\20080702\202839.zip
Como funciona:
Est e programa agora funciona! Vamos discut ir os melhorament os reais que fizemos na verso
3. Ns colet amos o coment rio do usurio usando a funo input e ent o verificamos se o
usurio efet ivament e ent rou com alguma coisa, por meio da det erminao do compriment o da
ent rada usando a funo len. Se o usurio apenas pressionou enter sem realment e haver
ent rado com algo (t alvez t enha sido apenas um backup de rot ina ou no haviam mudanas
significat ivas), ent o ns procedemos como hav amos feit o ant es.
Ent ret ant o, se um coment rio foi fornecido, ent o ele associado ao nome do arquivo
imediat ament e ant es da ext enso .zip. Observe que ns est amos subst it uindo espaos nos
coment rios por 'underscores' (sublinhados) - ist o porque gerenciar arquivos sem espaos
muit o mais fcil.
Mais Refinamentos
A quart a verso um script que funciona sat isfat oriament e para a maior part e dos usurios,
mas exist e espao para melhorias. Por exemplo, voc poderia incluir um n vel de verbosidade
para o programa, no qual voc poderia especificar uma opo -v para t ornar o seu programa
mais informat ivo.
Uma out ra poss vel melhoria seria permit ir arquivos e diret rios adicionais a serem passados
ao script na linha de comando. Ns podemos obt er esses nomes da list a sys.argv e adicion-
los a nossa list a sorigem ut ilizando o mt odo extend da classe list.
O refinament o mais import ant e seria a no ut ilizao da via at ravs de os.system para a
criao dos arquivos e ao invs disso lanar mo dos mdulos 'built -in' zipfile ou tarfile
para cri-los. Est es so part e da bibliot eca padro e pront ament e dispon veis para seu uso
sem as dependncias ext ernas do programa zip que deve est ar dispon vel no seu
comput ador.
Ent ret ant o, eu usei o caminho de os.system para criar um backup nos exemplos acima por
razes purament e pedaggicas, de modo que o exemplo fosse suficient ement e simples para
ser ent endido por qualquer pessoa mas real o suficient e para ser t il.
Voc poderia t ent ar escrever a quint a verso que ut iliza o mdulo zipfile ao invs do recurso
ao os.system?
O Processo de Desenvolvimento de Software
Ns passamos pelas vrias fases no processo de escrever um soft ware. Essas fases podem
ser resumidas como segue:

1. Descubra o Qu (Anlise)
2. Saiba Como (Projet o)
3. Faa (Implement ao)
4. Test e (Test ando and 'Debugando')
5. Use (Operao or Emprego)
6. Mant enha (Refinament o)
Uma forma recomendada de escrever programas o procediment o que ns seguimos ao criar
o script de backup: Realize a anlise e o projet o. Comece por implement ar uma verso mais
simples. Test e-a e consert e os seus 'bugs'. Use a verso para cert ificar-se que opera como
esperada. Agora, acrescent e algumas funcionalidades que voc queira e cont inue a repet ir o
ciclo Faa-Test e-Use t ant as vezes quant o necessrio. Lembre-se, Soft ware
desenvolvido, no vem pront o.
Resumo
Ns vimos como criar os nossos prprios programas/script s em Pyt hon e os vrios est gios
envolvidos ao escrever esses programas. Voc poder achar t il criar o seu poprio programa
da mesma maneira que ns fizemos nesse cap t ulo, de modo que voc se fique vont ade no
apemnas com Pyt hon, mas t ambm com a resoluo de problemas.
A seguir, discut iremos a programao orient ada a objet os.
Programao Orientada a Objetos
Contedo

1 Int roduo
2 O self
3 Classes
4 Mt odos de Objet os
5 O mt odo __init __
6 Variveis de Classe e Objet o
7 Herana
8 Met aclasses
9 Sumrio
Introduo
Em t odos os programas que escrevemos at agora, projet amos nosso programa em t ermos de
funes, ist o , blocos de declaraes que manipulam dados. Est a a chamada maneira de
programar orientada a procedimentos. Exist e out ra maneira de organizar seu programa que
combina dados e funcionalidades e as empacot a dent ro de algo chamado objet o. Est e o
chamado paradigma de programao orientada a objetos. Na maioria das vezes voc pode
usar a programao orient ada a procediment os, mas quando est amos escrevendo grandes
programas ou t emos um problema que se adequa melhor a esse mt odo, voc pode usar
t cnicas de programao orient adas a objet os.
Classes e objet os so os dois principais aspect os da programao orient ada a objet os. Uma
classe cria um novo tipo onde objet os so instncias da classe. Uma analogia que voc
pode t er variveis do t ipo int o que significa dizer que variveis que armazenam int eiros so
variveis que so inst ncias (objet os) da classe int.
Not a para Programadores de Linguagens Est t icas
Not e que mesmo os int eiros so t rat ados como objet os (da classe int). Isso diferent e
do C++ e do Java (ant es da verso 1.5) onde os int eiros so t ipos primit ivos nat ivos. Veja
help(int) para mais det alhes sobre a classe.
Programadores C# e Java 1.5 encont raro semelhanas com os conceit os de boxing e
unboxing.
Objet os podem armazenar dados ut ilizando variveis comuns que pertencem ao objet o.
Variveis que pert encem a um objet o o classe so chamadas de campos. Objet os t ambm
podem t er funcionalidade por meio de funes que pertencem a uma classe. Tais funes so
chamadas de mt odos da classe. Est a t erminologia import ant e porque nos ajuda a
diferencias ent re funes e variveis que so independent es e as que pert encem a uma
classe ou objet o. Colet ivament e, os campos ou mt odos podem ser considerados atributos da
classe.
Os campos podem ser de dois t ipos - eles podem pert encer a cada inst ncia/objet o ou podem
pert encer classe em si. Elas so chamadas de variveis de inst ncia e variveis de
classe, respect ivament e.
Uma classe criada usando a palavra-chave class. Os campos e mt odos da classe so
list ados em um bloco indent ado.
O self
Os mt odos t em apenas uma diferena espec fica em relao a funes comuns: eles devem
t er um primeiro nome ext ra que deve ser inclu do no in cio da list a de parmet ros, mas voc
no deve at ribuir um valor a esse parmet ro quando chama o mt odo, pois o Pyt hon o fornece
implicit ament e. Essa varivel em part icular refere-se ao prprio objet o e, por conveno,
chamada de self.
Embora seja poss vel dar qualquer nome a est e parmet ro, fortemente recomendado que
voc use o nome self. Exist em muit as vant agens um usar um nome padro - qualquer leit or
do seu programa ir reconhec-lo imediat ament e e mesmo IDEs especializadas podem ajud-
lo se voc usar self.
Not a para Programadores C++/Java/C#
O self em Pyt hon equivalent e ao pont eiro this em C++ e referncia this em Java e
C#.
Voc deve est ar int rigado sobre como Pyt hon at ribui o valor para self e o porqu voc no
precisa at ribuir um valor para ele. Um exemplo t ornar mais claro. Digamos que voc t enha
uma classe chamada MyClass e uma inst ncia dest a classe chamada MyObject. Quando voc
invoca um mt odo dest e objet o como MyObject.method(arg1, arg2), ist o convert ido
aut omat icament e pelo Pyt hon em MyClass.method(MyObject, arg1, arg2) - est e o sent ido
especial de self.
Ist o t ambm significa que, se voc t em um mt odo que no possui argument os, ent o voc
ainda assim dever t er um argument o - o self.
Classes
A classe mais simples poss vel most rada no seguint e exemplo.
#!/usr/bin/python
# Arquivo: simplestclass.py

class Person:
pass # Um bloco vazio

p = Person()
print(p)
Sa da:
$ python simplestclass.py
<__main__.Person object at 0x019F85F0>
Como Funciona:
Criamos uma nova classe usando a inst ruo class e o nome da classe. Na sequncia, t emos
um bloco de inst rues que formam o corpo da classe. Nest e caso, t emos um bloco vazio que
indicado pela inst ruo pass.
Em seguida, criamos um objet o/inst ncia dest a classe usando o nome da classe seguido por
um par de parnt eses. (Aprenderemos mais sobre inst anciao na prxima seo). Para
verificao, confirmamos o t ipo da varivel simplement es imprimindo-a (print). Isso nos diz que
t emos uma inst ncia da classe Person no mdulo __main__.
Observe que o endereo de memria onde seu objet o est armazenado t ambm impresso.
O endereo t er um valor diferent e em seu comput ador, uma vez que o Pyt hon poder
armezenar o objet o onde quer que haja espao.
Mtodos de Objetos
J discut imos que classes/objet os podem t er mt odos exat ament e como funes, excet o pelo
fat o de que t emos uma varivel ext ra - self. Vejamos um exemplo.
#!/usr/bin/python
# Arquivo: method.py

class Person:
def sayHi(self):
print('Hello, how are you?')

p = Person()
p.sayHi()

# Este pequeno exemplo tambm pode ser escrito como Person().sayHi()
Sa da:
$ python method.py
Hello, how are you?
Como Funciona:
Aqui vemos o self em ao. Observe que o mt odo sayHi no possui qualquer parmet ro
mas, ainda assim, t emos o self na definio do mt odo.
O mtodo __init__
Exist em vrios nomes de mt odos que possuem significado especial em classes Pyt hon.
Veremos agora o significado do mt odo __init__.
O mt odo __init__ invocado pront a e aut omat icament e quando um objet o de uma classe
inst anciado. Est e mt odo t il para realizar quaisquer iniciaes que voc desejar fazer com
o seu objet o. Observe os sublinhados duplos, no in cio e no final do nome.
Exemplo:
#!/usr/bin/python
# Arquivo: class_init.py

class Person:
def __init__(self, name):
self.name = name
def sayHi(self):
print('Hello, my name is', self.name)

p = Person('Swaroop')
p.sayHi()

# Este exemplo tambm pode ser escrito como Person('Swaroop').sayHi()
Sa da:
$ python class_init.py
Hello, my name is Swaroop
Como Funciona:
Aqui, definimos o mt odo __init__ com um parmet ro name (alm do usual parmet ro self).
Ent o, simplesment e criamos um novo at ribut o t ambm chamado name. Observe que t rat am-
se de variveis diferent es, embora t enham o mesmo nome ('name'). A not ao por pont o nos
permit e diferenciar uma varivel da out ra.
Mais import ant e ainda, observe que ns no invocamos o mt odo __init__ explicit ament e,
mas apenas passamos os argument os ent re os parnt eses aps o nome da classe, quando
criamos uma nova inst ncia. Est e o significado especial dest e mt odo.
Agora, podemos usar o at ribut o self.name em nossos mt odos, como demonst rado no
mt odo sayHi.
Not a para Programadores C++/Java/C#
O mt odo __init__ anlogo a um construtor em C++, Java ou C#.
Variveis de Classe e Objeto
J discut imos a respeit o do lado funcional de classes e objet os (i.e. mt odos), agora vamos
aprender sobre dados. Dados (i.e. campos ou at ribut os) so nada mais que variveis comuns
que est o associadas ao espao de nomes (namespace) de uma classe e/ou objet o. Ist o
significa que esses nomes so vlidos apenas no cont ext o de uma classe e/ou objet o
part icular. Por isso so chamados de espaos de nomes (name spaces).
Exist em dois t ipos de atributos (ou campos) - variveis de classe e variveis de objet o, que so
classificados dependendo de quem - a classe ou o objet o - possui essas variveis.
Variveis de classe so compart ilhadas - elas podem ser acessadas por t odas as inst ncias
daquela classe. H apenas uma cpia de uma varivel de classe e quando qualquer inst ncia
daquela classe modifica o seu valor, essa mudana ser vist a por t odas as out ras inst ncias.
Variveis de objeto so part iculares a cada inst ncia individual de uma classe. Nest e caso,
cada objet o possui a sua prpria cpia, ou seja, elas no so compart ilhadas e no est o
relacionadas de qualquer maneira out ras variveis com o mesmo em out ras inst ncias. Um
exemplo t ornar mais fcil de ent ender:
#!/usr/bin/python
# Arquivo: objvar.py

class Robot:
'''Representa um rob com um nome.'''

# Uma varivel de classe, para contar o nmero de robs.
population = 0

def __init__(self, name):
'''Inicia os dados.'''
self.name = name
print('(Iniciando {0})'.format(self.name))

# Quando este rob criado ele contabilizado
# na populao geral de robs
Robot.population += 1

def __del__(self):
'''Estou morrendo.'''
print('{0} sendo destrudo!'.format(self.name))

Robot.population -= 1

if Robot.population == 0:
print('{0} era o ltimo.'.format(self.name))
else:
print('Existe(m) ainda {0:d} rob(s) trabalhando.'.format(Robot.population))

def sayHi(self):
'''Saudaes do rob.

Sim, eles podem fazer isso.'''
print('Saudaes, meus mestres me chamam {0}.'.format(self.name))

def howMany(klass):
'''Imprime a populao atual.'''
print('Temos um total de {0:d} rob(s).'.format(Robot.population))
howMany = classmethod(howMany)

droid1 = Robot('R2-D2')
droid1.sayHi()
Robot.howMany()

droid2 = Robot('C-3PO')
droid2.sayHi()
Robot.howMany()

print("\nRobs podem realizar algum trabalho aqui.\n")

print("Robs terminaram seus trabalhos. Ento vamos destru-los.")
del droid1
del droid2

Robot.howMany()
Sa da:
(Iniciando R2-D2)
Saudaes, meus mestres me chamam R2-D2.
Temos um total de 1 rob(s).
(Iniciando C-3PO)
Saudaes, meus mestres me chamam C-3PO.
Temos um total de 2 rob(s).

Robs podem realizar algum trabalho aqui.

Robs terminaram seus trabalhos. Ento vamos destru-los.
R2-D2 sendo destrudo!
Existe(m) ainda 1 rob(s) trabalhando.
C-3PO sendo destrudo!
C-3PO era o ltimo.
Temos um total de 0 rob(s).
Como Funciona:
Est e um longo exemplo, mas ajuda a demonst rar a nat ureza das variveis de classe e de
inst ncia. Aqui, population pert ence classe Robot e, port ant o, uma varivel de classe. A
varivel name pert ence ao objet o (inst ncia, pois at ribu da usando self) e, port ant o, uma
varivel de inst ncia.
Assim, nos refer mos varivel de classe population como Robot.population e no como
self.population. Por out ro lado, nos refer mos varivel de inst ncia name usando a not ao
self.name, nos mt odos daquele objet o. Lembre-se dest a simples diferena ent re variveis de
classe e de inst ncia. Not e t ambm que, uma varivel de inst ncia com o mesmo nome de
uma varivel de classe ir se sobrepor varivel de classe, escondendo-a!
O mt odo howMany , na verdade, um mt odo de classe, e no um mt odo de inst ncia.
Port ant o, o primeiro argument o klass. Not e que escrevemos klass com 'k', por que no
podemos reut ilizar a palavra class que a palavra-chave usada para criar nova classes.
Ainda no t erminamos de definir 'howMany', pois t emos que t ornar expl cit o que t rat a-se de
um mt odo de classe. Para isso, empacotamos o mt odo usando a funo int erna
classmethod.
Podemos obt er o mesmo efeit o usando decorat ors:
@classmethod
def howMany(klass):
'''Imprime a populao atual.'''
print('Temos um total de {0:d} rob(s).'.format(Robot.population))
Pense em decorators como sendo at alhos para uma chamada expl cit a a uma inst ruo, como
vimos nest e exemplo.
Not e que o mt odo __init__ usado para iniciar a inst ncia de Robot com um nome. Na
iniciao, increment amos em 1 a populao (population) de robs, uma vez que t emos mais
um rob adicionado. Observe t ambm que os valores de self.name so espec ficos a cada
objet o demonst rado a nat ureza das variveis de inst ncia.
Lembre-se que voc deve referir-se s variveis e mt odos de uma mesma inst ncia soment e
em conjunt o com self. Ist o chamado de referncia ao atributo.
Nest e exemplo, t ambm vemos o uso de docst rings para classes e t ambm para mt odos.
Podemos acessar a document ao da classe em t empo de execuo usando Robot.__doc__ e
a document ao de um mt odo usando Robot.sayHi.__doc__.
Assim como o mt odo __init__, h um out ro mt odo especial __del__ que invocado com
quando um objet o est para ser eliminado, ist o , quando no ser mais ut ilizado e ser
eliminado para que o sist ema reut ilize o t recho de memria que aquela inst ncia est iver
ocupando. Nest e mt odo, simplesment e decrement amos a populao geral de robs em 1
usando Person.population -= 1.
O mt odo __del__ ser execut ado quando o objet o no est iver mais em uso e no h
garant ias de quando o mt odo ser invocado. Se voc deseja v-lo em ao, devemos ut ilizar
a inst ruo del explicit ament e, que exat ament e o que fizemos.
Not a para Programadores C++/Java/C#
Todos os membros de classe (incluindo dados - variveis) so pblicos e t odos os
mt odos so virtual em Pyt hon.
H uma exceo: Se voc definir nomes para os membros prefixados com dois caracteres
de sublinha como em __privatevar, Pyt hon alt era esse nome int ernament e (t cnica
chamada name-mangling) para t ornar a varivel, efet ivament e, privada.
Assim, segue-se a conveno de que, qualquer varivel que deva ser ut ilizada apenas
pela classe ou pela inst ncia deve iniciar com um sublinhado e, t odos os out ros nomes
so pblicos e podem ser ut ilizados por out ras classes/objet os. Lembre-se de que est a
apenas uma conveno e no exigido pelo Pyt hon (excet o para prefixos que iniciem
com dois caract eres de sublinhado).
Not e t ambm que o mt odo __del__ anlogo ao conceit o de mt odos destructor.
Herana
Um dos maiores benef cios da programao orient ada a objet os reusabilidade de cdigo, e
uma maneiras de obt er ist o at ravs do mecanismo de herana. Herana pode ser imaginada
como a implement ao de um relacionament o tipo e subtipo ent re classes.
Suponha que voc deva escrever um programa para cont role de professores e alunos em uma
escola. Eles possuem caract er st icas comuns t ais como nome, idade e endereo. Eles t ambm
possuem caract er st icas espec ficas t ais como salrio, mat rias e leaves para professores e
not as e mensalidades para alunos.
Voc pode criar duas classes independent es, uma para t ipo, mas adicionar uma nova
carat er st ica comum significar adicionar nas duas classes independent es. Ist o t orna-se
rapidament e desajeit ado.
Um modo mais eficient e criar uma classe comum chamada SchoolMember e ent o fazer
out ras duas classes professor (Teacher) e aluno (Student) herdarem suas caract er st ias, ist o ,
elas sero seus sub-t ipos, e ent o poderemos adicionar caract er st icas espec ficas para cada
sub-t ipo.
Exist em muit as vant agens nest a abordagem. Se adicionarmos ou mudarmos qualquer
funcionalidade em SchoolMember, ist o ser aut omat icament e reflet ido em seus sub-t ipos. Por
exemplo, voc poder adicionar um novo campo ID para professores e alunos simpesment e
adicionando esse campo na classe SchoolMember. Ent ret ant o, mudanas em sub-t ipos no
afet aro out ros sub-t ipos. Out ra vant agem que voc pode se referir aos objet os professores
e alunos como objet os SchoolMember, o que pode ser t il em algumas sit uaes, t al como
cont ar o nmero t ot al de membros. Ist o chamado de polimorfismo, onde um sub-t ipo pode
ser subst it u do em qualquer sit uao onde um super-t ipo esperado, ist o , o objet o pode ser
manipulado como se fosse uma inst ncia da classe pai.
Observe t ambm que ns reutilizamos o cdigo da classe pai (super-t ipo) e por isso no
precisamos repet -lo nos sub-t ipos, como t er amos que fazer no caso de usarmos classes
independent es.
A classe SchoolMember nest a sit uao conhecida como classe base (base class) ou super
classe.. As classes Teacher e Student so chamadas de classes derivadas (derived classes)
ou sub-classes.
Vamos implement ar o exemplo cit ado:
#!/usr/bin/python
# Arquivo: inherit.py

class SchoolMember:
'''Representa qualquer membro da escola.'''
def __init__(self, name, age):
self.name = name
self.age = age
print('(Iniciado SchoolMember: {0})'.format(self.name))

def tell(self):
'''Imprime os detalhes desta instncia.'''
print('Nome:"{0}" Idade:"{1}"'.format(self.name, self.age), end=" ")

class Teacher(SchoolMember):
'''Representa um professor.'''
def __init__(self, name, age, salary):
SchoolMember.__init__(self, name, age)
self.salary = salary
print('(Iniciado Teacher: {0})'.format(self.name))

def tell(self):
SchoolMember.tell(self)
print('Salrio: "{0:d}"'.format(self.salary))

class Student(SchoolMember):
'''Representa um aluno.'''
def __init__(self, name, age, marks):
SchoolMember.__init__(self, name, age)
self.marks = marks
print('(Iniciado Student: {0})'.format(self.name))

def tell(self):
SchoolMember.tell(self)
print('Nota: "{0:d}"'.format(self.marks))

t = Teacher('Mrs. Shrividya', 40, 30000)
s = Student('Swaroop', 25, 75)

print() # imprime uma linha em branco

members = [t, s]
for member in members:
member.tell() # funciona tanto para Teachers como para Students
Sa da:
$ python inherit.py
(Iniciado SchoolMember: Mrs. Shrividya)
(Iniciado Teacher: Mrs. Shrividya)
(Iniciado SchoolMember: Swaroop)
(Iniciado Student: Swaroop)

Nome:"Mrs. Shrividya" Idade:"40" Salrio: "30000"
Nome:"Swaroop" Idade:"25" Nota: "75"
Como Funciona:
Para usar herana, especificamos os nomes das classes base em uma t upla, logo aps o nome
da classe em sua declarao. Em seguida, observamos que o mt odo __init__ da classe base
explicit ament e invocado usando a varivel self, de t al maneira que podemos iniciar a poro
da classe base do objet o. muit o import ant e lembrar-se dist o - Pyt hon no invocar
aut omat icament e o const rut or da classe base, por isso voc dever invoc-lo explicit ament e.
Observamos t ambm que podemos invocar mt odos da classe base prefixando o nome da
classe na chamada do mt odo e ent o passar como argument o a varivel self alm de
quaisquer out ros argument os.
Not e que podemos t rat ar inst ncias de Teacher ou Student simplesment e como inst ncias de
SchoolMember, t al como quando usamos o mt odo tell da classe SchoolMember.
Ainda, not e que invocado o mt odo tell do sub-t ipo e no o mt odo tell da classe
SchoolMember. Uma maneira de ent eder ist o que Pyt hon sempre procura pelo mt odo
invocado, primeiro no t ipo real do objet o, o que verificado nest e caso. Se o mt odo invocado
no puder ser encont rado, Pyt hon ir procurar pelo mt odo nas classes base (especificadas
na t upla onde a classe declarada) uma-a-uma na ordem em que foram escrit as.
Uma not a sobre t erminologia - se mais de uma classe fornecida na t upla de herana (na
declarao da classe), ist o chamado de herana mltipla.
Metaclasses
H muit o mais no vast o t pico da programao orient ada a objet os, mas t ocaremos
levement e em apenas alguns poucos t picos apenas para ficarmos sabendo que exist em.
Assim como usamos classes para criar objet os, podemos ut ilizar met aclasses para criar
classes. Met aclasses so usadas para modificar ou criar novos comport ament os em classes.
Vamos t omar um exemplo. Suponha que desejemos t er cert eza que sempre criaremos
inst ncias de subclasses da classe SchoolMember e que no criaremos inst ncias da classe
SchoolMember em si.
Podemos garant ir isso usando um conceit o chamado de classe base abstrata (abstract base
class). Isso significa que a classe ser abstrata o que quer dizer que a classe em si um
conceit o, e no deve ser ut ilizada como uma classe real (ou seja, no devem ser criados
objet os - inst ncias - dessa classe).
Podemos declarar que a nossa classe uma classe base abst rat a usando a met aclasse
int erna chamada ABCMeta (ABC - abstract base class).
#!/usr/bin/env python
# Arquivo: inherit_abc.py

from abc import *

class SchoolMember(metaclass=ABCMeta):
'''Representa um membro qualquer da escola.'''
def __init__(self, name, age):
self.name = name
self.age = age
print('(Iniciado SchoolMember: {0})'.format(self.name))

@abstractmethod
def tell(self):
'''Imprime os dados da instncia.'''
print('Nome:"{0}" Idade:"{1}"'.format(self.name, self.age), end=" ")

class Teacher(SchoolMember):
'''Representa um professor.'''
def __init__(self, name, age, salary):
SchoolMember.__init__(self, name, age)
self.salary = salary
print('(Iniciado Teacher: {0})'.format(self.name))

def tell(self):
SchoolMember.tell(self)
print('Salrio: "{0:d}"'.format(self.salary))

class Student(SchoolMember):
'''Representa um aluno.'''
def __init__(self, name, age, marks):
SchoolMember.__init__(self, name, age)
self.marks = marks
print('(Iniciado Student: {0})'.format(self.name))

def tell(self):
SchoolMember.tell(self)
print('Nota: "{0:d}"'.format(self.marks))

t = Teacher('Mrs. Shrividya', 40, 30000)
s = Student('Swaroop', 25, 75)

m = SchoolMember('abc', 10)

m.tell()

print() # imprime uma linha em branco

members = [t, s]
for member in members:
member.tell() # funciona tanto para Teacher como para Student
Sa da:
(Iniciado SchoolMember: Mrs. Shrividya)
(Iniciado Teacher: Mrs. Shrividya)
(Iniciado SchoolMember: Swaroop)
(Iniciado Student: Swaroop)
Traceback (most recent call last):
File "C:\Users\swaroop\python\usingabc.py", line 44, in <module>
m = SchoolMember('abc', 10)
TypeError: Can't instantiate abstract class SchoolMember with abstract methods tell
Como funciona:
Podemos declarar o mt odo tell da classe SchoolMember como sendo um mt odo abst rat o,
assim, aut omat icament e, no poderemos criar inst ncias da classe SchoolMember.
Ent ret ant o, podermos criar inst ncias de Teacher e Student como se fossem inst ncias de
SchoolMember, por que eles so subclasses.
Sumrio
Acabamos de explorar os vrios aspect os de classes e objet os bem como vrias t erminologias
relacionadas. Vimos t ambm os benef cios e as armadilhas da programao orient ada a
objet os. Pyt hon fort ement e orient ado a objet os e compreender cuidadosament e est es
conceit os o ajudaro muit o a longo prazo.
A seguir, aprenderemos a lidar com ent rada e sa da ( input/output) e sobre como acessar
arquivos em Pyt hon.
Entrada e Sada
Contedo

1 Int roduo
2 Ent rada do usurio
3 Arquivos
4 Pickle
5 Sumrio
Introduo
Haver sit uaes em que seu programa dever int eragir com o usurio. Por exemplo, voc
poderia desejar obt er alguma ent rada do usurio e ent o imprimir algo. Ns podemos fazer
isso usando as funes input() e print().
Para a sa da, ns t ambm podemos usar vrios mt odos da classe str (st ring). Por exemplo,
voc pode usar o mt odo rjust para t ornar uma st ring just ificada a direit a em uma largura
especificada. Veja help(str).
Out ro t ipo comum de ent rada/sa da o uso de arquivos. A habilidade de criar, ler e escrever
arquivos essencial para muit os programas e ns exploraremos est e aspect o nest e cap t ulo.
Entrada do usurio
#!/usr/bin/python
# user_input.py

def reverse(texto):
return texto[::-1]

def is_palindrome(texto):
return texto == reverse(texto)

algo = input('Entre com o texto: ')
if (is_palindrome(algo)):
print("Sim, um palndromo")
else:
print("No, no um palndromo")
Sa da:
$ python user_input.py
Entre com o texto: senhor
No, no um palndromo

$ python user_input.py
Entre com o texto: ana
Sim, um palndromo

$ python user_input.py
Entre com o texto: somavamos
Sim, um palndromo
Como funciona:
Ns usamos um 'slicing' para invert er o t ext o. Ns j vimos como podemos faz-lo 'slices' de
sequncias usando o cdigo seq[a:b] iniciando da posio a para a posio b. Ns t ambm
podemos fornecer um t erceiro argument o que det ermina os passos pelos quais o 'slicing'
feit o. O passo padro 1, pois assim ele ret orna uma part e cont nua do t ext o. Dando um
passo negat ivo, i.e. -1 o t ext o ser ret ornado de forma invert ida.
A funo input() recebe uma st ring como argument o e a most ra para o usurio. Ent o ela
espera que o usurio digit e algo e pressione a t ecla de ret orno (Ent er). Feit o isso, a funo
input() ir ret ornar o t ext o.
Ns pegamos est e t ext o e o invert emos. Se o t ext o original e o invert ido forem iguais, ent o o
t ext o um pal ndromo.
Lio de casa:
Verificar se um t ext o um pal ndromo deveria ignorar pont uao, espaos e caixas alt as e
baixas. Por exemplo, "Socorram-me, subi no nibus em Marrocos!" t ambm um pal ndromo,
mas nosso at ual programa no diz isso. Voc pode modificar o programa para reconhecer est e
pal ndromo?
Arquivos
Voc pode abrir e usar arquivos para leit ura ou gravao criando um objet o da classe file e
usando seus mt odos read, readline ou write para ler ou escrever no arquivo. A possibilidade
de ler ou escrever no arquivo depende do modo que voc especificou em sua abert ura.
Quando voc acabar de usar o arquivo, voc pode chamar o mt odo close() para dizer para o
Pyt hon que ns t erminamos de usar o arquivo.
Exemplo:
#!/usr/bin/python
# Filename: usando_arquivo.py

poema = '''\
Programar divertido
Quando o trabalho est pronto
se voc quer tornar seu trabalho divertido:
use Python!
'''

f = open('poema.txt', 'w') # abrir para escrever ('w'riting)
f.write(poema) # escreve o texto no arquivo
f.close() # fecha o arquivo

f = open('poema.txt') # se nenhum modo especificado, o modo leitura ('r'ead) aberto por padro
while True:
linha = f.readline()
if len(linha) == 0: # Tamanho 0 indica EOF (fim do arquivo - End Of File)
break
print(linha, end='')
f.close() # fecha o arquivo
Sa da:
$ python usando_arquivo.py
Programar divertido
Quando o trabalho est pronto
se voc quer tornar seu trabalho divertido:
use Python!
Como funciona:
Inicialment e, abrimos um arquivo usando a funo embut ida open e especificando o nome do
arquivo e o modo no qual queremos abri-lo. Os modos podem ser de leit ura ('r'), gravao
('w') ou adicionar ('a'). Ns t ambm podemos t rabalhar com um arquivo de t ext o ('t') ou um
arquivo binrio ('b'). Na verdade exist em muit o mais mdulos dispon veis, digit ar help(open)
dar a voc mais det alhes sobre eles. Por padro, open() consideradas o arquivo como um
't 'ext o e o abre no modo leit ura ('r'ead).
Em nosso exemplo, ns primeiro abrimos o arquivo em modo t ext o para gravao, ent o
usamos o mt odo write do objet o arquivo para escrever o t ext o e, finalment e, fechamos o
arquivo com o mt odo close.
Em seguida, ns abrimos o mesmo arquivo novament e para leit ura. Ns no especificamos o
modo pois o modo padro 'arquivo t ext o para leit ura'. Ns lemos cada linha usando o mt odo
readline em um loop. Est e mt odo ret orna uma linha complet a, incluindo o carct er de nova
linha no final. Quando uma st ring vazia ret ornada, significa que ns at ingimos o fim do
arquivo e, ent o, 'int errompemos' (break) o loop.
Por padro, a funo print() imprime o t ext o com uma nova linha na t ela. Ns evit amos a
nova linha especificando end='' pois a linha que lida do arquivo j t ermina com um carct er
de nova linha. Finalment e, ns fechamos o arquivo.
Agora, verifique o cont edo do arquivo poema.txt para se cert ificar de que o programa
escreveu e leu o arquivo.
Pickle
Pyt hon fornece um mdulo padro chamado pickle, que permit e que voc armazene
qualquer objet o de Pyt hon em um arquivo e ent o o pegue novament e mais t arde. Ist o
chamado de armazenar o objet o permanentemente.
Exemplo:
#!/usr/bin/python
# Filename: pickling.py

import pickle

# o nome do arquivo onde armazenaremos o objeto
arquivo_listadecompras = 'listadecompras.data'
# a lista de coisas a comprar
listadecompras = ['ma', 'manga', 'cenoura']

# Escrevendo no arquivo
f = open(arquivo_listadecompras, 'wb')
pickle.dump(listadecompras, f) # descarrega o objeto em um arquivo
f.close()

del listadecompras # destri a varivel listadecompras

# L o que foi armazenado
f = open(arquivo_listadecompras, 'rb')
lista_armazenada = pickle.load(f) # carrega o objeto do arquivo
print(lista_armazenada)
Sa da:
$ python pickling.py
['ma', 'manga', 'cenoura']
Como funciona:
Para armazenar um objet o em um arquivo, ns devemos inicialment e abrir o arquivo com o
mdulo open em modo de gravao ('w'rit e) e 'b'inrio, para ent o chamar a funo dump do
mdulo pickle. Est e processo chamado pickling.
A seguir, ns recuperamos o objet o, usando a funo load do mdulo pickle que ret orna o
objet o. Est e processo chamado unpickling.
Sumrio
Ns discut imos vrios t ipos de ent rada/sa da e t ambm o manuseio de arquivos usando o
mdulo pickle.
A seguir, ns exploraremos o conceit o de excees.
Excees
Contedo

1 Int roduo
2 Erros
3 Excees
4 Manipulando Excees
5 Levant ando Excees
6 Try .. Finally
7 O Comando Wit h
8 Resumo
Introduo
Excees ocorrem quando det erminadas sit uaes "excepcionais" ocorrem em seu programa.
Por exemplo, que t al se voc est iver para ler um arquivo e est e no exist ir? Ou que t al se voc
acident alment e delet ou-o durant e a execuo do programa? Tais sit uaes so manipuladas
uit izando excees.
De modo anlogo, que t al se o seu programa t ivesse comandos invlidos? Isso manipulado
por Pyt hon, que levant a (raise) as mos e avisa a voc que exist e um erro.
Erros
Suponha uma simples chamada da funo print<tt>. Que tal se ns escrevssemos
errado como <tt>print ou Print<tt>? Observe a capitalizao. Neste caso, Python
levanta um erro de sintaxe.
>>> Print('Hello World')
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
Print('Hello World')
NameError: name 'Print' is not defined
>>> print('Hello World')
Hello World
Observe que um <tt>NameError levant ado e t ambm que a localizao onde o erro foi
det et ado impressa. Isso o que um error handler para est e erro faz.
Excees
Ns t ent aremos (t ry) ler a ent rada do usurio. Digit e ctrl-d e veja o que acont ece.
>>> s = input('Entre com alguma coisa --> ')
Entre com alguma coisa -->
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
s = input('Entre com alguma coisa --> ')
EOFError: EOF when reading a line
Pyt hon levant a um erro chamado EOFError o qual basicament e significa que encont rou um
s mbolo end of file (fim do arquivo) (represent ado por ctrl-d) quando no esperaria v-lo.
Manipulando Excees
Ns podemos manipular excees usando o comando try..except. Ns basicament e
colocamos os comandos cost umeiros dent ro do bloco do t ry e dipomos os nossos
manipuladores de erros no bloco do except .
#!/usr/bin/python
# Nome do arquivo: try_except.py

try:
texto = input('Entre com alguma coisa --> ')
except EOFError:
print('Por que voc jogou um EOF em mim?')
except KeyboardInterrupt:
print('Voc cancelou a operao.')
else:
print('Voc entrou com {0}'.format(texto))
Sa da:
$ python try_except.py
Entre com alguma coisa --> # Press ctrl-d
Por que voc jogou um EOF em mim?

$ python try_except.py
Entre com alguma coisa --> # Press ctrl-c
Voc cancelou a operao.

$ python try_except.py
Enter something --> nenhuma exceo
Voc entrou com nenhuma exceo
Como Funciona:
Ns colocamos t odos os comandos que poderiam levant ar excees dent ro do bloco do try e
ent o os 'handlers' para os erros/excees na clusula/bloco except. a clusula except pode
manipular um nico erro ou exceo especificada, ou uma list a de erros/excees ent re
parnt eses. Se nenhum nome de erro ou exceo for fornecido, manipular todos os erros ou
excees.
Not e que deve haver pelo menos uma clusula except associada com cada clusula try. Ou
no haveria razo para um bloco de t ry.
Se um erro ou exceo no manipulada, ent o invocado o Pyt hon handler padro que
int errompe a execuo do programa e emit e uma mensagem de erro. Ns vimos isso em ao
acima.
Ns podemos t ambm t er uma clusula else associada a um bloco try..catch. A clusula
else execut ada se nenhuma exceo ocorrer.
No poximo exemplo, ns veremos como obt er um objet o exceo de modo que ns possamos
recuperar informao adicional.
Levantando Excees
Voc pode levant ar excees com o comando raise fornecendo o nome do erro/exceo e o
objet o exceo que dever ser lanado (thrown).
O erro ou exceo que voc pode levant ar dever ser uma classe que diret a ou indiret ament e
deve ser uma classe derivada da classe Exception.
#!/usr/bin/python
# Nome do arquivo: raising.py

class ShortInputException(Exception):
'''Uma classe exceo definida pelo usurio.'''
def __init__(self, length, atleast):
Exception.__init__(self)
self.length = length
self.atleast = atleast

try:
text = input('Entre com alguma coisa --> ')
if len(text) < 3:
raise ShortInputException(len(text), 3)
# Demais tarefas podem continuar como usualmente aqui...
except EOFError:
print('Por que voc jogou um EOF em mim?')
except ShortInputException as ex:
print('ShortInputException: A entrada teve o comprimento {0}, o esperado era pelo menos {1}'\
.format(ex.length, ex.atleast))
else:
print('Nenhuma exceo foi levantada.')
Sa da:
$ python raising.py
Entre com alguma coisa --> a
ShortInputException: A entrada teve o comprimento 1, o esperado era pelo menos 3

$ python raising.py
Enter something --> abc
Nenhuma exceo foi levantada.
Como Funciona:
Aqui ns est amos criando o nosso prprio t ipo de Exceo. Est e novo t ipo de exceo
chamado ShortInputException. Ele t em dois campos - length que o compriment o da
ent rada fornecida e atleast que o m nimo compriment o da ent rada que o programa est ava
esperando.
Na clusula except, ns mencionamos a classe de erro que ser guardada as (como) o nome
da variable que ir mant er o objet o erro/exceo correspondent e. Ist o anlogo aos
parmet ros e argument os em uma chamada de funo. Dent ro dessa part icular clusula
except clause, ns usamos os campos length e atleast do objet o exceo para imprimir uma
mensagem apropriada ao usurio.
Try .. Finally
Suponha que voc est ivesse lendo um arquivo em seu programa. Como voc poderia
assegurar-se que o objet o arquivo est ivesse fechado adequadament e, fosse ou no
levant ada uma exceo? Isso pode ser obt ido usando-se o bloco finally. Not e que voc pode
empregar uma clusula except junt ament e com o bloco finally para o mesmo
correspondent e bloco try. Voc t er que imergir um dent ro do out ro se quiser ut ilizar ambos.
#!/usr/bin/python
# Nome do arquivo: finally.py

import time

try:
f = open('poema.txt')
while True: # nossa usual linguagem de leitura de arquivo
line = f.readline()
if len(line) == 0:
break
print(line, end='')
time.sleep(2) # Assegurar que levar algum tempo executando
except KeyboardInterrupt:
print('!! Voc cancelou a leitura do arquivo.')
finally:
f.close()
print('(Limpando tudo: Fechado o arquivo)')
Sa da:
$ python finally.py
Programming is fun
When the work is done
if you wanna make your work also fun:
!! Voc cancelou a leitura do arquivo.
(Limpando tudo: Fechado o arquivo)
Como Funciona:
Ns efet uamos a t radicional rot ina de leit ura do arquivo, mas int roduzimos arbit rariament e
uma pausa ('sleeping') de 2 segundos depois da impresso de cada linha, usando a funo
time.sleep de modo que o programa execut e lent ament e (Pyt hon muit o rpido por
nat ureza). Enquant o o programa est iver execut ando, digit e ctrl-c para int erromper/cancelar o
programa.
Observe que a exceo KeyboardInterrupt lanada e o programa t ermina. Ent ret ant o, ant es
da sa da do programa, a clusula finally execut ada e o objet o arquivo sempre fechado.
O Comando With
Adquirir um recurso no bloco try e liber-lo no bloco finally um padro comum. Da exist e
t ambm o comando with que faz com que isso seja realizado de um modo bem mais claro:
#!/usr/bin/python
# Nome do arquivo: using_with.py

with opened("poema.txt") as f:
for line in f:
print(line, end='')
Como Funciona:
A sa da dever ser a mesma do exemplo ant erior. A diferena aqui est em que ns est amos
usando a funo opened com o comando with.
Ist o no congest iona o processament o do arquivo e focaliza no que est amos fazendo com ele.
Ns deixamos o fechament o do arquivo a ser realizado aut omat icament e por opened.
Resumo
Ns discut imos o uso dos comandos try..except e try..finally. Vimos como criar o nosso
prprio t ipo de exceo e t ambm como levant ar excees.
Em seguida, exploraremos a Pyt hon St andard Library (Bibiot eca Padro do Pyt hon).
Biblioteca Padro
Contedo

1 Int roduo
2 Mdulo sys
3 Mdulo logging
4 Mdulos urllib e json
5 O Mdulo da Semana
6 Sumrio
Introduo
A Bibliot eca Padro do Pyt hon cont m um vast o nmero de mdulos t eis e part e de t odas
as inst alaes de Pyt hon. import ant e conhece-la, uma vez que muit os problemas podem ser
resolvidos rapidament e se voc est iver familiarizado com o grande nmero de coisas que
est as bibliot ecas podem fazer.
Ns iremos explorar alguns dos mdulos mais usados dest a bibliot eca. Voc pode encont ar
det alhes complet os para t odos os mdulos da Bibliot eca Padro do Pyt hon na seo 'Library
Reference' da document ao que vem com sua inst alao do Pyt hon.
Vamos explorar alguns mdulos t eis.
Not a
Se voc achar est es t picos muit o avanados, voc pode pular est e cap t ulo. No ent ant o,
eu realment e recomendo que voc volt e para est udar est e cap t ulo quando voc est iver
familiarizado com a programao usando Pyt hon.
Mdulo sys
O mdulo sys cont m funcionalidades espec ficas do sist ema. Ns j vimos que a list a
sys.argv cont m os argument os da linha de comando.
Suponha que ns desejemos checar a verso do Pyt hon que est sendo usada para se
assegurar que est amos usando a verso 3. O mdulo sys nos d t al funcionalidade.
>>> import sys
>>> sys.version_info
(3, 0, 0, 'beta', 2)
>>> sys.version_info[0] >= 3
True
Como funciona:
O mdulo sys t em a t upla version_info que nos d informaes sobre a verso do Pyt hon. O
primeiro valor a verso principal. Ns podemos verificar a verso, por exemplo, para garant ir
que o programa s rode sob o Pyt hon 3.0:
#!/usr/bin/python
# Filename: checarversao.py
import sys, warnings
if sys.version_info[0] < 3:
warnings.warn("Necessrio Python 3.0 para rodar este programa",
RuntimeWarning)
else:
print('Prosseguir normalmente')
Sa da:
$ python2.5 checarversao.py
checarversao.py:6: RuntimeWarning: Necessrio Python 3.0 para rodar este programa
RuntimeWarning)

$ python3 checarversao.py
Prosseguir normalmente
Como funciona:
Ns usamos um out ro mdulo da bibliot eca padro chamado warnings, que usado pra
most rar avisos para o usurio final. Se a verso do Pyt hon no for 3.0 ou superior, ns
most ramos o aviso correspondent e.
Mdulo logging
E se voc desejar armazenar mensagens de depurao ou out ras mensagens import ant es, de
forma que voc possa verificar se seu programa est rodando da forma que voc esperava?
Como armazenar est as mensagens? Isso pode ser feit o usando o mdulo logging.
#!/usr/bin/python
# Filename: use_logging.py
import os, platform, logging

if platform.platform().startswith('Windows'):
logging_file = os.path.join(os.getenv('DIRETRIOINICIAL'), os.getenv('CAMINHO'), 'test.log')
else:
logging_file = os.path.join(os.getenv('HOME'), 'test.log')

logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s : %(levelname)s : %(message)s',
filename = logging_file,
filemode = 'w',
)

logging.debug("Incio do programa")
logging.info("Fazendo alguma coisa")
logging.warning("Terminando agora")
Sa da:
$python use_logging.py
Logging to C:\Users\swaroop\test.log
Se ns verificarmos o cont edo de test.log, veremos algomo como ist o:
2008-09-03 13:18:16,233 : DEBUG : Incio do programa
2008-09-03 13:18:16,233 : INFO : Fazendo alguma coisa
2008-09-03 13:18:16,233 : WARNING : Terminando agora
Como funciona:
Ns usamos t rs mdulos da bibliot eca padro - o mdulo os para int eragir com o sist ema
operacional, o mdulo platform para informaes sobre a plat aforma, i.e. o sist ema
operacional, e o mdulo logging para registrar informaes.
Inicialment e, ns verificamos qual o sist ema operacional que est amos usando, verificando a
st ring ret ornada por platform.platform() (para mais informaes, veja import platform;
help(platform) no int erpret ador Pyt hon). Se for o Windows, ns apont amos o diret rio inicial,
o caminho e o nome do arquivo no qual queremos armazenar a informao. Junt ando est as
t rs part es, ns t eremos a localizao complet a do arquivo. Para out ras plat aformas, ns
precisamos conhecer apenas a past a home do usurio e assim t eremos a localizao
complet a do arquivo.
Ns usamos a funo os.path.join() para junt ar est as t rs part es da localizao. O mot ivo
de usar uma funo especial ao inves de apenas somar as st rings, que est a funo se
assegura de que a localizao complet a est eja de acordo com o format o esperado pelo
sist ema operacional.
Ns configuramos o mdulo logging para escrever t odas as mensagens no arquivo
especificado, num format o espec fico.
Finalment e, ns podemos armazenar mensagens t eis para depurao, informao, avisos ou
mensagens cr t icas. Uma vez que o programa t enha rodado, ns podemos verificar est e
arquivo e, assim, saberemos o que acont eceu no programa, mesmo que nenhuma informao
t enha sido most rada para o usurio durant e seu funcionament o.
Mdulos urllib e json
No seria divert ido se ns pudssemos escrever nossos prprios programas de busca para
int ernet ? Vamos descobrir como faz-los.
Ist o pode ser feit o usando-se alguns mdulos. Primeiro o mdulo urllib que podemos usar
para obt er qualquer pgina da int ernet . Poderemos usar o Yahoo! Search para pesquisar
result ados e, por sort e, eles podem nos dar os result ados num format o chamado JSON, que
podemos analisar facilment e graas ao mdulo embut ido json da bibliot eca padro.
Not a
Est e programa ainda no funciona devido ao que parece ser um bug no Pyt hon 3.0 bet a 2.
#!/usr/bin/python
# Filename: yahoo_search.py

import sys
if sys.version_info[0] != 3:
sys.exit('Este programa precisa do Python 3.0')

import json
import urllib, urllib.parse, urllib.request, urllib.response

# Obtenha seu prprio APP ID em http://developer.yahoo.com/wsregapp/
YAHOO_APP_ID = 'jl22psvV34HELWhdfUJbfDQzlJ2B57KFS_qs4I8D0Wz5U5_yCI1Awv8.lBSfPhwr'
SEARCH_BASE = 'http://search.yahooapis.com/WebSearchService/V1/webSearch'

class YahooSearchError(Exception):
pass

# Obtido de http://developer.yahoo.com/python/python-json.html
def search(query, results=20, start=1, **kwargs):
kwargs.update({
'appid': YAHOO_APP_ID,
'query': query,
'results': results,
'start': start,
'output': 'json'
})
url = SEARCH_BASE + '?' + urllib.parse.urlencode(kwargs)
result = json.load(urllib.request.urlopen(url))
if 'Error' in result:
raise YahooSearchError(result['Error'])
return result['ResultSet']

query = input('Pelo que voc quer procurar? ')
for result in search(query)['Result']:
print("{0} : {1}".format(result['Title'], result['Url']))
Como funciona:
Ns podemos obt er result ados de um det erminado sit e, fornecendo o t ext o que se deseja
procurar em um format o espec fico. Ns devemos especificar diversas opes, que ns
junt amos usando o format o key1=value1&key2=value2, que usado pela funo
urllib.parse.urlencode().
Ent o, por exemplo, abra est e link em seu navegador e voc vera 20 result ados, iniciando do
primeiro, para a busca das palavras "byt e of pyt hon". Est e endereo nos d os result ados no
format o JSON.
Ns realizamos a conexo a est e URL usando a funo urllib.request.urlopen() e
passando o arquivo obt ido para json.load() que ir ler seu cont edo e simult neament e
convert e-li em um objet o Pyt hon. Ent o ns usamos um loop nest es result ados para most r-
los ao usurio final.
O Mdulo da Semana
H muit o mais para ser explorado na bibliot eca padro, t al como depurao, uso de opes em
linha de comando, expresses comuns e muit o mais.
A melhor forma de se aprofundar na bibliot eca padro ler os excelent es art igos 'Pyt hon
Module of t he Week' de Doug Hellmann.
Sumrio
Ns vimos algumas das funcionalidades de alguns mdulos da Bibliot eca Padro do Pyt hon.
recomendvel que voc navegue pela document ao da Bibliot eca Padro do Pyt hon para t er
uma ideia de t udo que os mdulos so capazes de fazer.
A seguir, ns veremos vrios aspect os sobre Pyt hon que faro nosso t our mais completo.
Mais
Contedo

1 Int roduo
2 Passando Tuplas Adiant e
3 Mt odos Especiais
4 Blocos de Um nico Comando
5 Formas Lambda
6 List Comprehension
7 Recebendo Tuplas e Dicionrios em Funes
8 Os Comandos Exec E Eval
9 O Comando Assert
10 A Funo Repr
11 Resumo
Introduo
At agora ns cobrimos a maior part e dos diversos aspect os que ns usaremos. Nest e
cap t ulo, ns abordaremos algumas funcionalidades adicionais que t ornaro o nosso
conheciment o de Pyt hon mais complet o.
Passando Tuplas Adiante
Algumas vezes voc gost aria de poder ret ornar com dois valores diferent es de uma funo?
Voc pode. Tudo que precisa fazer usar uma t upla.
>>> def obt enha_det alhes_erro():
... ret urn (2, 'det alhes do segundo erro')
...
>>> errnum, errst r = obt enha_det alhes_erro()
>>> errnum
2
>>> errst r
'det alhes do segundo erro'
Not e que o uso de a,b = <alguma expressao> int erpret a o resulat ado da expresso como uma
t upla com dois valores.
Se quiser int erpret ar o result ado como (a, <t odo o rest o>), ent o voc precisa acrescent ar um
ast erisco, como se fossem parmet ros de uma funo:
>>> a, *b = [1, 2, 3, 4]
>>> a
1
>>> b
[2, 3, 4]
Isso t ambm significa que o modo mais rpido de t rocar duas var aveis ent re si em Pyt hon :
>>> a = 5; b = 8
>>> a, b = b, a
>>> a, b
(8, 5)
Mtodos Especiais
Exist em cert os mt odos t ais como __init __ e __del__ que possuem significado especial em
classes.
Os mt odos especiais so empregados para emular cert os comport ament os dos t ipos 'built -
in'. Por exemplo, se voc quiser usar a operao de indexao x[indice] para a sua classe
(exat ament e como voc faria para list as e t uplas), ent o t udo o que voc deve fazer
implement ar o mt odo __get it em__() e est feit o. Se voc reflet ir a respeit o, ist o o que
Pyt hon faz no caso da prpria classe das list as!
Alguns mt odos especiais t eis est o list ados na t abela que segue. Se voc quiser conhecer
mais a respeit o de t odos os mt odos especiais, veja o manual.
Alguns Mt odos Especiais
Nome
Explicao
__init __(self, ...)
Est e mt odo chamado imediat ament e ant es que o novo objet o criado est eja pront o para
ut ilizao.
__del__(self)
Chamado imediat ament e ant es que o objet o seja dest ru do.
__st r__(self)
Chamado quando ns usamos a funo print ou quando st r() usado.
__lt __(self, ot her)
Chamado quando o operador 'menor do que' (<) usado. Similarment e, exist em mt odos
especiais para t odos os operadores (+, >, et c.)
__get it em__(self, key)
Chamado quando a operao de indexao x[key] usada.
__len__(self)
Chamado quando a funo 'built -in' len() ut ilizada para um objet o sequncia.
Blocos de Um nico Comando
Ns j vimos que cada bloco de comandos post o separadament e do rest o pelo seu prprio
n vel de indent ao. Bem, exist em algumas excees. Se o seu bloco de comandos cont m
apenas um nico comando, ent o voc poder especific-lo na mesma linha de, digamos, um
comando condicional ou em lao. O seguint e exemplo dever t ornar isso mais claro:
>>> flag = True
>>> if flag: print 'Sim'
...
Sim
Observe que o comando nico empregado no local e na mesma linha e no como um bloco
separado. Embora voc possa fazer uso disso para t ornar menor o seu programa, eu
aconselho a evit ar est e procediment o em curt o-circuit o, excet o no caso de verficao de erro,
uma vez que ficar muit o mais fcil acrescent ar um comando a mais se voc est iver usando a
indent ao apropriada.
Formas Lambda
Uma forma lambda empregada para criar novos objet os funes e ret orn-los em t empo de
execuo ('runt ime').

1. !/usr/bin/pyt hon
2. Nome do arquivo: lambda.py
def cria_repet idor(n):
return lambda s: s * n
dobro = cria_repet idor(2)
print (dobro('palavra')) print (dobro(5))
Sa da:
$ python lambda.py
palavrapalavra
10
Como Funciona:
Aqui ns desenvolvemos uma funo cria_repet idor para fabricar novos objet os funes em
t empo de execuo e ret orn-los. Um comando lambda ut ilizado para criar o objet o funo.
Essencialment e lambda recebe um parmet ro seguido de apenas uma nica expresso, a qual
se t orna o corpo da funo e o valor dessa expresso ret ornado pela nova funo. Not e que
mesmo um comando print (Pyt hon 2.x) no pode ser usado no int erior de uma forma lambda,
apenas expresses.
A SER FEITO
Podemos realizar uma list.sort() fornecendo uma funo de comparao criada usando lambda?
pont os = [ { 'x' : 2, 'y' : 3 } , { 'x' : 4, 'y' : 1 } ]

1. pont os.sort (lambda a, b : cmp(a['x'], b['x']))
List Comprehension
'List comprehensions' so empregadas para obt er-se uma nova list a de uma list a exist ent e.
Suponha que voc t enha uma list a de nmeros e deseje obt er uma nova list a com t odos os
nmeros mult iplicados por dois apenas quando o nmero por sua vez for maior do que 2. 'List
comprehensions' so ideais para t ais sit uaes.

1. !/usr/bin/pyt hon
2. Nome do arquivo: list _comprehension.py
list aum = [2, 3, 4] list adois = [2*i for i in list aum if i > 2] print (list adois)
Sa da:
[2, 6, 8]
Como Funciona:
Aqui ns obt emos uma nova list a at ravs da especificao da manipulao a ser efet uada
quando alguma condio for sat isfeit a (if i > 2). Not e que a list a original permanece inalt erada.
A vant agem de usar 'list comprehensions' que reduz a quant idade de cdigo padro
('boilerplat e') requerido quando ns usamos laos para processar cada element o de uma list a
e adicion-lo em uma nova list a.
Recebendo Tuplas e Dicionrios em Funes
Exist e um modo especial de at ribuir parmet ros a uma funo como uma t upla ou dicionrio,
usando os prefixos * e ** respect ivament e. Isso muit o t il quando se considera um nmero
varivel de argument os na funo.
>>> def powersum(power, *args):
... Ret orna a soma de cada argument o elevada pot ncia especificada.
... t ot al = 0
... for i in args:
... t ot al += pow(i, power)
... ret urn t ot al
...
>>> powersum(2, 3, 4)
25
>>> powersum(2, 10)
100
Uma vez que t emos um prefixo * na varivel args, t odos os argument os ext ra passados
funo so at ribu dos a args como uma t upla. Se ao invs disso, t ivesse sido usado um prefixo
**, os parmet ros ext ra seriam considerados como pares chave/valor de um dicionrio.
Os Comandos Exec E Eval
A funo exec empregada para execut ar comandos em Pyt hon que est o armazenados em
uma st ring ou arquivo, ao cont rrio do que se est ivessem no prprio programa. Por exemplo,
ns podemos gerar uma st ring cont endo comandos em Pyt hon em t empo de execuo e
ent o execut -los ut ilizando a funo exec:
>>> exec('print ("Hello World"'))
Hello World
De modo anlogo, a funo eval ut ilizada para avaliar expresses vlidas em Pyt hon que
est o armazenadas em uma st ring. Um exemplo simples most rado a seguir.
>>> eval('2*3')
6
O Comando Assert
O comando assert empregado para assegurar-se de que alguma coisa verdadeira. Por
exemplo, se voc est bem cert o que t er pelo menos um element o em uma list a que voc
est usando e quer verificar esse fat o e levant ar ('raise') um erro se isso no for verdade,
ent o o comando assert ideal para essa sit uao. Quando um comando assert falha, um
Assert ionError levant ado.
>>> mylist = ['it em']
>>> assert len(mylist ) >= 1
>>> mylist .pop()
'it em'
>>> mylist
[]
>>> assert len(mylist ) >= 1
Traceback (most recent call last ):
File "<stdin>", line 1, in <module>
Assert ionError
O comando assert deve ser usado com caut ela. Na maior part e dos casos, melhor capt urar
excees, seja manipulando o problema, ou emit indo uma mensagem de erro para o usurio e
saindo do programa.
A Funo Repr
A funo repr ut ilizada para obt er-se uma represent ao por meio de uma st ring cannica
do objet o. A part e int eressant e que voc t er eval(repr(objet o)) == objet o em quase t odos
os casos.
>>> i = []
>>> i.append('it em')
>>> repr(i)
"['it em']"
>>> eval(repr(i))
['it em']
>>> eval(repr(i)) == i
True
Basicament e, a funo repr empregada para obt er-se uma represent ao imprim vel do
objet o. Voc pode cont rolar o que a sua classe ret orna sob a funo repr, definindo o mt odo
__repr__ em sua classe.
Resumo
Ns abordamos algumas funcionalidades adicionais de Pyt hon nest e cap t ulo e mesmo assim
no cobrimos t odas elas. Porm, a essa et apa, ns apresent amos a maior part e do que voc
ir empregar na prt ica. Isso suficient e para que voc possa iniciar com quaisquer programas
que for produzir.
A seguir, ns discut iremos como explorar Pyt hon ainda mais.
Em Seguida
Se voc leu est e livro complet ament e at agora e prat icou escrevendo muit os programas,
ent o deve est ar se sent indo confort vel e familiarizado com Pyt hon. Voc provavelment e
t ambm criou diversos programas em Pyt hon para realizar alguns experiment os e exercit ar
suas habilidades em Pyt hon. Se voc no fez isso ainda, deveria t -lo feit o. A quest o agora
"O Que Fazer Em Seguida?".
Eu sugiro que voc at aque o seguint e problema:
Crie o seu prprio programa "address_book" usando linha de comando, com o qual voc
poder adicionar, modificar, delet ar ou realizar buscas pelos seus cont at os, t ais como
amigos, familiares e colegas, bem como pelas suas informaes, t ais como endereos de
email e/ou nmeros de t elefone. Os det alhes devem ser armazenados para post erior
recuperao.
Ist o se t orna razoavelment e fcil se voc pensar em t ermos de t odo o mat erial que ns
encont ramos at agora. Se voc ainda assim deseja inst rues de como proceder, aqui est
uma sugest o.
Sugest o (No leia)
Crie uma classe que represent e a informao sobre cada pessoa. Use um dicionrio para
guardar os objet os pessoais com o nome de cada uma como chave. Ut ilize o mdulo
pickle para guardar os objet os de forma persist ent e em seu disco r gido. Empregue os
mt odos int ernos do dicionrio para adicionar, delet ar e modificar as pessoas.
Uma vez que voc seja capaz de realizar isso, voc pode proclamar-se programador em
Pyt hon. Agora, imediat ament e envie um email me agradecendo por est e grande livro ;-). Est e
passo opcional mas recomendado. Da mesma forma, por favor, considere realizar uma
doao, cont ribuir com melhorament os ou volunt ariar-se para t radues para apoiar o
cont nuo desenvolviment o dest e livro.
Se voc achou muit o fcil aquele programa, aqui est um out ro:
Implement e o comando replace. Est e comando subst it uir uma st ring por out ra em uma
list a de arquivos fornecida.
O comando replace pode ser t o simples ou sofist icado quant o voc desejar, desde simples
subst it uio de st rings, at a busca por padres (expresses regulares).
Depois disso, aqui est o alguns caminhos para prosseguir a sua jornada com Pyt hon:
Contedo

1 Exemplos de Programas
2 Pergunt as e Respost as
3 Tips and Tricks (Sugest es e Truques)
4 Livros, Publicaes, Tut oriais, V deos
5 Discusso
6 Novidades
7 Inst alando Bibliot ecas
8 Soft ware Grfico
8.1 Resumo das Ferrament as GUI
9 Vrias Implement aes
10 Resumo
Exemplos de Programas
A melhor maneira de aprender uma linguagem de programao escrever muit os programas e
ler um mont e deles:

Reposit rio de programas Roset t a
Exemplos de Pyt hon examples em java2s
Pyt hon Cookbook uma coleo ext remament e valiosa de receit as ou sugest es em
como resolver cert as espcies de problemas ut ilizando Pyt hon. Est a uma leit ura
indispensvel para t odos os usurios de Pyt hon.
Pyt hon Brasil. Est e o principal sit e brasileiro de Pyt hon.
Perguntas e Respostas

Oficial Pyt hon Dos e Don't s (Faa Isso e No Faa Aquilo)
Pyt hon FAQ Oficial
List a de Norvig das Infrequent ly Asked Quest ions (Pergunt as Rarament e Feit as)
Ent revist a em Pyt hon Q & A
Pergunt as St ackOverflow marcadas com pyt hon
Tips and Tricks (Sugestes e Truques)

Pyt hon Tips & Tricks
Advanced Soft ware Carpent ry using Pyt hon
Charming Pyt hon uma excelent e srie de art igos de David Mert z relacionados com
Pyt hon.
Livros, Publicaes, Tutoriais, Vdeos
O prximo passo lgico depois dest e livro a leit ura do ext raordinrio livro de Mark Pilgrim Dive
Int o Pyt hon (Mergulhando em Pyt hon) o qual voc pode t ambm ler int eirament e on line. Esse
livro explora t picos como expresses regulares, processament o XML, servios web, t est e
unit rio (unit t est ing), et c. em det alhes.
Out ros recursos adicionais so:

v deos ShowMeDo sobre Pyt hon
List a complet a de Awaret ek dos t ut oriais em Pyt hon
The Effbot 's Pyt hon Zone
Links no fim de cada Pyt hon-URL! email
Pyt hon Papers
Discusso
Se voc parece incapaz de resolver um problema de Pyt hon, e no sabe a quem pergunt ar,
ent o a list a comp.lang.pyt hon discussion group o melhor lugar para colocar a sua quest o.
Cert ifique-se de fazer sua 'lio de casa' e de haver t ent ado resolver o seu problema por voc
mesmo ant es de mais nada.
Make sure you do your homework and have t ried solving t he problem yourself first .
Novidades
Se voc quiser conhecer as lt imas novidades no mundo de Pyt hon, ent o acompanhe o
Pyt hon Planet oficial e/ou o Pyt hon Planet no-oficial.
Instalando Bibliotecas
Exist e um nmero enorme de bibliot ecas open-source no Pyt hon Package Index as quais voc
pode empregar em seus prprios programas.
Para inst alar aquelas bibliot ecas, voc pode usar o excelent e EasyInst all t ool de Philip Eby.
Software Grfico
Suponha que voc queira criar seus prprios programas grficos usando Pyt hon. Isso pode ser
feit o por meio de um bibliot eca GUI (Graphical User Int erface) com suas int erfaces v nculos
(bindings) com Pyt hon. Int erfaces so o que permit e que voc escreva programas em Pyt hon e
ut ilize as bibliot ecas que, por sua vez, so escrit as em C, C++ ou out ras linguagens.
Exist em um grande nmero de opes para GUI usando Pyt hon:
PyQt
Est a a int erface em Pyt hon para o Qt t oolkit que a fundao sobre a qual KDE foi
produzido. Qt ext remament e fcil de usar e muit o poderosa, especialment e devido ao
Qt Designer e a incrivel document ao. PyOt livre se voc quiser criar soft ware open-
source (GPL) e pago, se voc for desenvolver soft ware propriet rio fechado. Para iniciar,
leia o PyQt t ut orial ou o PyQt book.
PyGTK
Est a a int erface em Pyt hon para o GTK+ t oolkit que a fundao sobre a qual Gnome
foi produzido. GTK+ possui muit os pequenos problemas para o seu uso, mas uma vez que
voc se t orna confort vel, poder criar aplicat ivos com GUI rapidament e. A int erface
grfica Glade indispensvel. A document ao ainda deve ser emlhorada. GTK+ funciona
bem em Linux, mas a sua verso para Windows est incomplet a. Voc pode criar
soft wares t ant o livres, como propriet rios usando GTK+. Para iniciar, leia o PyGTK t ut orial.
wxPyt hon
Est e a int erface em Pyt hon para o wxWidget s t oolkit . wxPyt hon t em uma curva de
aprendizagem associada. Ent ret ant o, bem port vel e execut a em Linux, Windows, MAC
e mesmo em plat aformas imersas (embedded). Exist em muit as IDEs dispon veis em
wxPyt hon as quais incluem GUI designers, t ais como SPE (St ani's Pyt hon Edit or) e a
const rut ora de GUIs wxGlade. Voc pode criar soft ware t ant o livre como propriet rio
usando wxPyt hon. Para iniciar, leia o wxPyt hon t ut orial.
TkInt er
Est e dos mais ant igos GUI t oolkit s em exist ncia. Se voc t em ut ilizado IDLE, j viu o
programa TkInt er em ao. No oferece uma das melhores sensaes para o usurio,
devido a sua aparncia ant iquada. TkInt er port vel e execut a t ant o em Linux/Unix,
quant o em Windows. Mas import ant e que t uso, TkInt er part e int egrant e da dist ribuio
padro de Pyt hon. Para iniciar, leia o Tkint er t ut orial.
Para mais opes, veja o wiki GuiProgramming no websit e oficial de Pyt hon.
Resumo das Ferramentas GUI
Infelizment e, no exist e uma ferrament a GUI padro em Pyt hon. Eu sugiro que voc escolha
uma das ant eriores, dependendo de sua sit uao. O primeiro fat or se voc est dispost o a
pagar para usar qualquer uma das ferrament as GUI. O segundo fat or se voc quer que seu
programa execut e apenas em Windows ou em MAC e Linux, ou em t odos eles. O t erceiro fat or,
se Linux for a plat aforma escolhida, se voc um usurio de KDE ou de GNOME.
Para uma anlise mais det alhada e complet a, veja a pgina 26 de The Pyt hon Papers, Volume
3, Issue 1.
Vrias Implementaes
EXist em usualment e duas part es em uma linguagem de programao - a linguagem e o
soft ware. A linguagem "como" ns escrevemos algo. O soft ware "o que" realment e
execut a o nossos programas.
Ns vimos uit lizando o soft ware "CPyt hon" para execut ar os nossos programas. Est e
referenciado como CPyt hon, pois escrit o na linguagem C e o "Int erpret ador Pyt hon
Clssico".
Exist em adicionalment e out ros soft wares que podem execut ar seus programas em Pyt hon:
Jyt hon
Uma implement ao de Pyt hon que execut a na plat aforma Java. Isso significa que voc
pode usar as bibliot ecas e classes em Java dent ro da linguagem Pyt hon e vice-versa.
IronPyt hon
Uma implement ao de Pyt hon que execut a em plat aforma .NET. Isso significa que voc
pode usar as bibliot ecas e classes .NET dent ro da linguagem Pyt hon e vice-versa.
PyPy
Uma implement ao de Pyt hon escrit a em Pyt hon! Est e um projet o de pesquisa para
t ornar mais fcil e rpido o int erpret ador, uma vez que o poprio int erpret ador est escrit o
em uma linguagem dinmica (em oposio a linguagens est t icas, t ais como C, Java, ou
C# nas implement aes acima).
St ackless Pyt hon
Uma implement ao que especializada em performance baseada em t hreads.
Exist em t ambm out ras t ais como CLPyt hon - uma implement ao de Pyt hon escrit a em
Common Lisp e IronMonkey, que uma implement ao de IronPyt hon para operar sobre um
int erpret ador JavaScript , o que poderia significar que voc poderia usar Pyt hon (ao invs de
JavaScript ) para escrever os seus programas web-browser ("Ajax").
Cada uma dessas implement aes t m a sua prpria rea especializada na qual so t eis.
Resumo
Ns chegamos ao final dest e livro, mas, como se diz comument e, est e "o comeo do fim"!
Voc , agora, um vido usurio de Pyt hon e est sem dvida pront o para resolver muit os
problemas ut ilizando Pyt hon. Voc pode iniciar por aut omat izar o seu comput ador para
realizar t oda espcie de coisas que sequer podiam ser imaginadas ant eriorment e, ou por
escrever seus prprios jogos e muit o, muit o mais. Assim, pode comear!
Apndice: FLOSS
FLOSS est baseado no conceit o de uma comunidade, que por sua vez est fundament ado
no conceit o de compart ilhament o, e part icularment e compart ilhament o de conheciment o.
FLOSS so livres para uso, modificao e redist ribuio.
Se voc j leu est e livro, ent o j est familiarizado com FLOSS, desde que voc vem
empregando Pyt hon ao longo dele e Pyt hon um soft ware de font e abert a (open source)!
Aqui est o alguns exemplos de FLOSS para dar-lhe uma idia do t ipo de coisas que a
const ruo e compart ilhament o comunit rio pode criar:

Linux. Est e um sist ema operacional FLOSS que o mundo int eiro est lent ament e
adot ando! Comeou com Linus Torvalds enquant o um est udant e. Agora, est
compet indo com o Microsoft Windows. [ Linux Kernel ]
Ubunt u. Est a uma dist ribuio gerenciada pela comunidade, pat rocinada pela
Canonical e a dist ribuio de Linux mais popular hoje em dia. Permit e que voc inst ale
uma quant idade enorme de FLOSS dispon veis e isso em uma maneira fcil de usar e
fcil de inst alar. Melhor que t udo, voc pode apenas reiniciar o seu comput ador e
execut ar Linux diret ament e do CD! Ist o permit e que voc experiment e complet ament e o
novo SO ant es de inst alar no seu comput ador. [ Ubunt u Linux ]
OpenOffice.org. Est a uma excelent e suit e de escrit rio com component es para
processament o de document o, apresent ao, planilhas, desenho, ent re out ras coisas.
Voc pode at mesmo abrir e edit ar arquivos de MS Word e MS PowerPoint com
facilidade. Ela execut a em quase t odas as plat aformas. [ OpenOffice ]
Mozilla Firefox. Est a a poxima gerao de navegadores para a web que est
compet indo com o Int ernet Explorer. bast ant e rpida e t em recebido aclamao cr t ica
pelos suas t imas e at raent es caract er st icas. O conceit o de ext enses permit e o
emprego de qualquer espcie de plugin.
O seu produt o companheiro Thunderbird um excelent e client e de email que t orna
muit o fcil a leit ura de emails. [ Mozilla Firefox, Mozilla Thunderbird ]
Mono. Est a uma implement ao de font e abert a da plat aforma .NET da Microsoft .
Permit e que as aplicaes .NET sejam criadas e execut adas em Linux, Windows,
FreeBSD, Mac OS e muit as out ras plat aformas. [ Mono, ECMA, Microsoft .NET ]
Servidor de web Apache. Est e um popular servidor de web. De fat o, o mais popular
servidor de web do planet a! Ele execut a em um pouco mais do que a met ade de t odos
os sit es web que exist em. Sim, isso mesmo - Apache gerencia mais sit es web do que
t oda a concorrncia (incluindo Microsoft IIS) combinada. [ Apache ]
MySQL. Est e um servidor de bancos de dados ext remament e popular. muit o famoso
pela grande velocidade. o M na famosa pilha LAMP subjacent e na maior part e dos sit es
web na int ernet . [ MySQL ]
VLC Player. Est e o t ocador de v deo que pode t ocar qualuqer coisa de DivX a MP3 a
OGG, a VCDs e DVDs a ... que disse que soft ware abert o no seria divert ido? ;-) [ VLC
media player ]
GeexBox uma dist ribuio de Linux que projet ada para t ocar filmes assim que voc
reinicia do CD! [ GeexBox ]
Est a list a t em apenas a int eno de dar-lhe uma breve idia - exist em muit os mais excelent es
FLOSS dispon veis, t ais como a linguagem PERL, a linguagem PHP, os sist emas de
gerenciament o de cont edo para sit es web PLONE e Drupal, o servidor de banco de dados
Post greSQL, o jogo de corridas TORCS, a IDE KDevelop, o t ocador de filmes Xine, o edit or VIM,
o edit or Quant a+, o t ocador de udio Banshee, o programa de edio de imagens GIMP ... Est a
list a poderia no t erminar jamais.
Para obt er as lt imas not cias sobre o mundo FLOSS, verifique os seguint es sit es web:

linux.com
LinuxToday
NewsForge
Dist roWat ch
Visit e os seguint es sit es web para maiores informaes sobre FLOSS:

SourceForge
FreshMeat
Assim, v em frent e e explore o vast o, livre e abert o mundo de FLOSS!
Apndice: Sobre
Contedo

1 Clofon
1.1 Nasciment o do Livro
1.2 Era Adolescent e
1.3 Agora
2 Sobre o Aut or
Clofon
Quse t odos os soft wares que eu usei na criao dest e livro so softwares livres e abertos.
Nascimento do Livro
No primeiro esboo dest e livro, eu usei Linux Red Hat 9.0 como a fundao da minha est rut ura
e no sext o esboo eu usei Linux Fedora Core 3 como a base do meu esquema.
Inicialment e, eu est ava usando KWord para escrever o livro (como explicado em Lio de
Hist ria no prefcio).
Era Adolescente
Mais t arde, eu mudei para DocBook XML usando Kat e mas eu achei muit o mont ono. Assim,
eu mudei para OpenOffice, que era excelent e com o n vel de cont role que fornecia para
format ao, assim como a gerao de PDF, mas produzia um pssimo HTML do document o.
Finalment e, eu descobri XEmacs e reescrevi o livro desde o comeo em DocBook XML
(novament e) depois de decidir que aquele format o era a soluo de longo prazo.
No sext o esboo, eu decidi usar Quant a+ para realizar t oda a edio. As st ylesheet s que
vieram junt o com o Linux Fedora Core 3 foram ut ilizadas, assim como as font es padro.
Ent reant o, eu havia escrit o um document o CSS para fornecer cor e est ilo s pginas HTML. Eu
havia escrit o t ambm um analisador lxico grosseiro, em Pyt hon, que aut omat icament e
forneceu nfase na sint axe para as t odas as list agens dos programas.
Agora
Para est e st imo esboo, eu est ou usando MediaWiki como a base do meu set up. Agora, eu
edit o t udo online e os leit ores podem diret ament e ler/edit ar/discut ir dent ro do sit e wiki.
Eu ainda uso Vim para edio graas a ViewSourceWit h ext enso para Firefox que int egra-se
com Vim.
Sobre o Autor
ht t p://www.swaroopch.com/about /
Apndice: Histrico de Revises

1.90
04/09/2008 e ainda em progresso.
Reavivado depois de um hiat o de 3.5 anos!
Updat ing t o Pyt hon 3.0
Reescrit o usando MediaWiki (novament e)
1.20
13/01/2005
Complet ament e reescrit o usando Quant a+ em FC3 com muit as correes e
at ualizaes. Muit os exemplos novos. Reescrevi o meu DocBook desde o comeo.
1.15
28/03/2004
Revises menores
1.12
16/03/2004
Adies e correes.
1.10
09/03/2004
Mais correes de digit ao, graas aos meus leit ores ent usist icos e
colaborat ivos.
1.00
08/03/2004
Depois de uma enorme respost a e sugest es de meus leit ores, eu fiz revises
significat ivas no cont edo, junt ament e com correes de digit ao.
0.99
22/02/2004
Adicionei um novo cap t ulo sobre mdulos. Acrescent ei det alhes a respeit o do
nmero varivel de argument os em funes.
0.98
16/02/2004
Escrevi um script Pyt hon e um st ylesheet CSS para melhorar a sa da XML,
incluindo um grosseiro porm funcional analisador lxico para uma nfase
aut omt ica, no est ilo de VIM, na sint axe de list agens de programas.
0.97
13/02/2004
Masi um rascunho complet ament e reescrit o, em DocBook XML (novament e). O livro
melhorou muit o - est agora mais coerent e e leg vel.
0.93
25/01/2004
Adicionei t rechos em IDLE e mat erial mais especificament e volt ado a Windows.
0.92
05/01/2004
Mudanas em uns poucos exemplos.
0.91
30/12/2003
Erros de digit ao corrigidos. Muit os t picos improvisados.
0.90
18/12/2003
Mais dois cap t ulos acrescent ados. Format o de OppenOffice com revises.
0.60
21/11/2003
Complet ament e reescrit o e expandido.
0.20
20/11/2003
Alguns erros, alguns de digit ao, corrigidos.
0.15
20/11/2003
Convert ido para DocBook XML.
0.10
14/11/2003
Rascunho inicial usando KWord.
Sobre a Traduo
Ao redor do mundo, vrias pessoas se ofereceram como volunt rias para t raduzir o livro para
seus respect ivos idiomas. A verso em port ugus brasileiro ficou sob minha responsabilidade e
logo comecei a receber vrios emails de pessoas que t ambm se ofereceram para ajudar, de
forma que, num pequeno int ervalo de t empo, j t nhamos quase t odo o t ext o t raduzido.
Port ant o, gost aria de agradecer s seguint es pessoas pela prest at ividade e disposio:

Alvaro Net t o
Daniel Bagat ini
Daniel Gonalves
David Kwast
Emanuel R Woiski
Est vo Valado
vert on Arruda
Lucas Cast ro
Rodrigo Haas
Se esqueci de algum, s avisar que incluo nos crdit os.
Espero que a t raduo seja t il!
Rodrigo Amaral
ht t p://rodrigoamaral.net /a-byt e-of-pyt hon/
Table of Contents
Prefcio
Int roduo
Inst alao
Primeiros Passos
Fundament os
Operadores e Expresses
Cont role de Fluxo
Funes
Mdulos
Est rut uras de Dados
Resoluo de Problemas
Programao Orient ada a Objet os
Ent rada e Sa da
Bibliot eca Padro
Mais
Em Seguida
Apndice: FLOSS
Apndice: Sobre
Apndice: Hist rico de Revises
Sobre a Traduo
1 A Quem Se Dest ina Est e Livro
2 Lio de Hist ria
3 St at us do Livro
4 Sit e Oficial
5 Licena
6 Feedback
7 Algo Para Pensar
1 Int roduo
2 Caract er st icas de Pyt hon
3 Por que no Perl?
4 Por que no Ruby?
5 O Que Os Programadores Dizem
6 Sobre Pyt hon 3.0
1 Para usurios Linux e BSD
2 Para usurios Windows
2.1 Prompt do DOS
3 Para usurios MAC OS X
4 Sumrio
2 Usando o Prompt do Int erpret ador
3 Escolhendo um Edit or
4 Usando um Arquivo Font e
4.1 Como ele Funciona
4.2 Programas Execut veis em Pyt hon
5 Obt endo Ajuda
[1]

1 Const ant es Lit erais


2 Nmeros
3 St rings
3.1 Aspas Unit rias