Você está na página 1de 100

Python pt-br:Prefacio

From Notes
Python provavelmente uma das poucas linguagens de programao que so ao mesmo tempo simples e poderosas. Isso bom tanto para iniciantes quanto para programadores avanados e, mais importante, divertida de programar. Este livro visa ajud-lo a aprender essa linguagem maravilhosa e mostrar como fazer as coisas de modo rpido e indolor - de fato 'O Antdoto Perfeito para seus problemas de programao'.

A Quem Se Destina Este Livro


Este livro serve como guia ou tutorial da linguagem de programao Python. Ele destinado principalmente a iniciantes, mas tambm til para programadores experientes. O objetivo que, se tudo o que voc sabe sobre computadores como salvar arquivos de texto, ento voc possa tambm aprender Python com este livro. Se voc tem experincia prvia com programao, pode se interessar pelas diferenas entre Python e sua linguagem de programao favorita - coloquei em destaque muitas delas. No entanto, uma pequena advertncia: logo Python vai se tornar sua linguagem de programao favorita!

Lio de Histria
Primeiramente, eu iniciei no Python quando eu precisei escrever um instalador para um programa que eu escrevi chamado 'Diamond', para que eu pudesse instal-lo facilmente. Eu tive que escolher entre as referncias Python e Perl para a biblioteca Qt. Eu fiz algumas pesquisas na internet e encontrei um artigo onde Eric S. Raymond, um hacker famoso e respeitado, falou como o Python tornou-se sua linguagem de programao favorita. Eu tambm descobri que as referncias PyQt eram mais maduras quando coparadas s Perl-Qt. Assim, eu decidi que o Python era a melhor linguagem para mim. Logo, eu comecei a pesquisar por um bom livro sobre Python. Eu no consegui encontrar nenhum! Eu achei alguns livros da O'Reilly, mas eles ou eram muito caros ou pareciam mais com um manual de referncia do que com um guia. Assim, eu optei pela documentao que vinha com o Python. Entretanto, ela era muito breve e pequena. Eu tive uma boa noo sobre o Python, mas no era completa. Eu me sa bem, pois eu tinha uma experincia prvia em programao, mas a documentao era inadequada para novatos. Cerca de seis meses aps a minha primeira luta com o Python, eu instalei a (at ento) ltima distribuio Linux, Red Hat 9.0, e eu estava aprendendo entusiasmado o KWord. Eu o adorei e imediatamente tive a idia de escrever alguma coisa em Python. Eu comecei escrevendo umas poucas pginas, mas elas tornaram-se rapidamente um documento de 30 pginas. Ento, eu tornei sria a idia de transform-lo em algo mais til na forma de um livro. Aps uma "grande quantidade" de reescritas, o livro atingiu um estgio onde ele se tornou um guia til de aprendizado da linguagem Python. Eu considero que este livro minha contribuio e meu tributo comunidade do cdigo fonte aberto. Este livro comeou a partir das minhas notas pessoais em Python e eu ainda o considero da mesma maneira, embora eu tenha consumido muito esforo para torn-lo mais agradvel aos outros. :) No esprito verdadeiro do cdigo fonte aberto, eu recebi muitas sugestes construtivas, crticas e comentrios de leitores entusiastas que me ajudaram muito a melhorar este livro.

Status do Livro
As mudanas desde a ltima grande reviso de Maro de 2005 so referentes atualizao para o lanamento do Python 3.0 (esperado para Agosto/Setembro de 2008). Uma vez que a linguagem Python 3.0 em si ainda no foi finalizada/disponibilizada, este livro estar passando por constantes mudanas. No entanto, de acordo com o esprito da filosofia open source do "Release Early, Release Often" (entregar cedo e com freqncia), o livro atualizado foi lanado e est sendo atualizado constantemente. O livro precisa da ajuda de leitores como vocs para apontar quaisquer partes do livro que no estejam boas, incompreensveis ou simplesmente erradas. Por favor, escreva para o autor principal ou

para os respectivos tradutores com seus comentrios e sugestes. um esforo constante equilibrar este livro entre as necessidades dos iniciantes e a tendncia no sentido de completude da informao. Seria til se os leitores tambm dessem sua opiniao sobre o quanto este livro deve se aprofundar.

Site Oficial
O site oficial do livro http://www.swaroopch.com/notes/Python . No site voc pode ler o livro na ntegra ou pode baixar as suas ltimas verses e tambm me enviar sua opinio.

Licena
1. Este livro licenciado sob a licena Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported. Isto significa que: Voc livre para Compartilhar, isto , distribuir e transmitir este livro. Voc livre para Remixar, isto , adaptar este livro. Sob as seguinte condies: Atribuio. Voc deve atribuir o trabalho da maneira especificada pelo autor ou licenciador (mas no de forma a sugerir que eles endossam voc ou o uso que fizer deste livro). Uso no comercial. Voc no pode usar este livro para fins comerciais. Compartilhamento pela mesma Licena. Se voc alterar transformar ou se basear neste trabalho, voc s pode distribuir a obra resultante por esta mesma licena. Para qualquer reuso ou distribuio, os termos de licena deste livro devem estar claros. Qualquer uma das condies acima pode ser desconsiderada caso voc obtenha a permisso do detentor dos direitos. Nada nesta licena limita ou restringe os direitos morais do autor. 2. A atribuio deve ser exibida atravs de link para http://www.swaroopch.com/notes/Python e a indicao clara de que o texto original pode ser obtido neste local. 3. Todo o cdigo/scripts fornecidos neste livro esto licenciados sob a 3-clause BSD License, a menos que indicado de outro modo. 4. Contribuies voluntrias para este livro original devem estar sob esta mesma licena e o copyright deve ser atribudo para o autor principal deste livro.

Feedback
Coloquei um bocado de esforo para fazer este livro o mais interessante e preciso quanto foi possvel. No entanto, caso voc ache que alguma parte do material esteja inconsistente, incorreta ou simplesmente precise melhorar, ento por favor me informe, para que eu possa fazer as melhorias cabveis. Voc pode me contactar atravs da minha pgina de usurio.

Algo Para Pensar


Existem duas maneiras de construir um projeto de software: uma faz-lo to simples a ponto de que, obviamente, no haja deficincias; a outra faz-lo to complicado de modo que no haja deficincias bvias. -- C. A. R. Hoare Sucesso na vida menos uma questo de talento e oportunidade quanto de concentrao e perseverana. -- C. W. Wendte

Retrieved from "http://www.swaroopch.com/notes/Python_pt-br:Prefacio"

Category: A Byte of Python in Brazilian Copyright 2004-2011, Swaroop C H. Content is available under Creative Commons Attribution-Share Alike 3.0 Unported.

Python pt-br:Introducao
From Notes

Introduo
Python uma dessas raras linguagens em que se pode alegar ser ao mesmo tempo simples e poderosa. Voc vai se surpreender ao descobrir o quanto fcil se concentrar na soluo para o problema em vez da sintaxe e estrutura da linguagem que voc est programando. A introduo oficial para Python : Python uma poderosa linguagem de programao fcil de aprender. Possui eficientes estruturas de dados de alto-nvel e uma simples e efetiva abordagem para programao orientada a objetos. A elegante sintaxe e a tipagem dinmica de Python, aliada a sua natureza interpretada, faz dela uma linguagem ideal para criar scripts e desenvolver aplicaes de modo gil em diversas reas e na maioria das plataformas. Vou detalhar a maioria dessas caractersticas na prxima seo. Nota Guido van Rossum, criador da linguagem Python, cujo nome foi baseado na srie "Monty Python's Flying Circus" da BBC. Ele, particularmente, no gosta de cobras que para se alimentar, esmagam outros animais usando seu extenso corpo.

Caractersticas de Python
Simples Python uma linguagem simples e minimalista. Ler um bom programa em Python quase como ler em ingls, ainda que seja um ingls bem restrito. Este carter de pseudo-cdigo do Python um de seus maiores pontos fortes. Ele permite que voc se concentre na soluo do problema e no na linguagem em si. Fcil de Aprender Como voc ver, extremamente fcil iniciar-se em Python. A linguagem possui uma sintaxe extraordinariamente simples, como j mencionado. Livre e de Cdigo Aberto Python um exemplo de FLOSS (Free/Libre and Open Source Software. Traduzindo, voc pode distribuir livremente cpias deste software, ler seu cdigo-fonte, modific-lo, usar trechos em novos programas livres e tudo o que voc quiser fazer. FLOSS baseado no conceito de uma comunidade que compartilha conhecimento. Este um dos motivos pelos quais Python to bom - ele vem sendo criado e constantemente melhorado por uma comunidade que simplesmente quer ver a Python cada vez melhor. Linguagem de Alto Nvel Quando voc escreve programas em Python, no h necessidade de se preocupar com detalhes de baixo nvel tais como manipular a memria utilizada pelo programa, etc. Portvel Por ser uma linguagem de cdigo aberto, Python foi portada (ou seja, modificada para funcionar) em muitas plataformas. Todos os seus programas em Python podem rodar em qualquer uma

destas plataformas sem precisar de mudanas, desde que voc seja cuidadoso o suficiente para evitar usar caractersticas que dependam do sistema. Voc pode usar Python em Linux, Windows, FreeBSD, Macintosh, Solaris, OS/2, Amiga, AROS, AS/$)), BeOS, OS/390, z/OS, Palm OS, QNX, VMS, Psion, Acorn RISC OS, VxWorks, PlayStation, Sharp Zaurus, Windows CE e at mesmo no PocketPC! Interpretada Isto requer uma pequena explicao Um programa escrito em uma linguagem compilada como C ou C++ convertido da linguagem de origem (C ou C++) para a linguagem que falada por seu computador (cdigo binrio, ou seja, 0s e 1s) usando um compilador com vrios flags e opes. Quando voc roda o programa, o software linkeditor/carregador copia o programa do disco rgido para a memria e comea a execut-lo. Python, por sua vez, no necessita de compilao para cdigo binrio. Voc simplemente executa o programa diretamente do cdigo-fonte. Internamente, Python converte o cdigo-fonte em um formato intermedirio chamado bytecode, o traduz para a linguagem nativa do seu computador e ento o executa. Tudo isso, na verdade, torna Python muito mais fcil, uma vez que voc no precisa se preocupar com a compilao do programa, certificar-se que as bibliotecas necessrias esto todas linkeditadas e carregadas etc, etc. Isto tambm torna seus programas em Python muito mais portveis, j que voc pode simplesmente copiar seu programa em Python em outro computador e execut-lo! Orientada a Objetos Python suporta tanto programao procedural (estruturada) quanto orientada a objetos. Em linguagens procedurais, o programa construdo com base em procedimentos e funes, que nada mais so que trechos reutilizveis de programas. Em linguagens orientadas a objeto, com base em objetos que combinam dados e funcionalidade. Python tem uma maneira simples mas poderosa de implementar programao orientada a objetos, especialmente quando comparada a linguagens como C++ ou Java. Extensvel Se voc precisa que um trecho crtico de cdigo seja executado com muita rapidez ou quer que parte de algum algoritmo no seja aberta, voc pode codific-los em C ou C++ e ento us-los a partir de seu programa Python. Embarcvel Voc pode embarcar Pyhton em seus programas C/C++ para fornecer funcionalidades de scripting aos usurios dos programas. Bibliotecas Extensivas A Biblioteca Padro do Python (Python Standard Library) de fato enorme. Ela pode ajud-lo a fazer vrias coisas envolvendo expresses regulares, gerao de documentao, testes unitrios, threading, acesso a bancos de dados, browsers web, CGi, FTP, e-mail, XML, XML-RPC, HTML, arquivos WAV, criptografia, GUI (Interfaces Grficas com o Usurio), Tk e outras coisas dependentes do sistema. Lembre-se de que tudo isto est disponvel onde quer que Python esteja instalado. Esta a chamada filosofia das "Pilhas Includas" do Python. Alm da biblioteca padro, existem vrias outras bibliotecas de alta qualidade, tais comos wxPython , Twisted, Python Imaging Library e muitas outras.

Python , de fato, uma linguagem poderosa e empolgante. Ela possui a combinao exata de desempenho e caractersticas que fazem escrever programas em Python uma tarefa fcil e divertida.

Por que no Perl?


Se voc ainda no conhece, Perl outra linguagem de programao interpretada e de cdigo aberto extremamente popular. Se voc alguma vez tentou escrever um programa grande em Perl, voc poderia ter respondido essa pergunta sozinho! Em outras palavras, programas em Perl so fceis quando eles so pequenos e so excelentes para pequenos "hacks" e scripts "pra fazer o servio". No entanto, eles se tornam rapidamente difceis de manter medida em que se tornam maiores. E estou falando isso com base na minha experincia no Yahoo! escrevendo programas grandes em Perl. Quando comparados a Perl, os programas em Python so definitivamente mais simples, claros, fceis de escrever e, consequentemente, mais legveis e fceis de manter. Eu admiro Perl e uso diariamente para vrias tarefas, mas toda vez que escrevo um programa, comeo a pensar em termos de Python, porque se tornou natural para mim. Perl passou por tantos hacks e mudanas que parece que a linguagem toda um grande (mas timo) hack. Infelizmente, o futuro Perl 6 no parece trazer nenhuma melhoria quanto a isso. A nica e bastante significativa vantagem do Perl, na minha opinio, sua enorme biblioteca CPAN (Comprehensive Perl Archive Network). Como o nome sugere, uma imensa coleo de mdulos Perl e simplesmente inacreditvel, por causa de seu tamanho e profundidade - voc pode fazer praticamente qualquer coisa que seja possvel de se fazer com um computador usando estes mdulos. Uma das razes pelas quais Perl tem mais bibliotecas que Python o fato de existir h muito mais tempo. No entanto, isto parece estar mudando com o crescimento do Python Package Index.

Por que no Ruby?


Se voc ainda no sabia, Ruby uma outra popular linguagem de programao de cdigo aberto. Se voc j gosta e usa Ruby, ento eu definitivamente recomendo que continue a us-la. Para as outras pessoas que ainda no a usaram e esto tentando escolher entre aprender Python ou aprender Ruby, ento eu recomendaria Python, unicamente pela perspectiva de facilidade de aprendizado. Pessoalmente, achei difcil compreender a linguagem Ruby, mas todas as pessoas que conseguem aprovam a beleza da linguagem. Infelizmente no tive tanta sorte.

O Que Os Programadores Dizem


interessante ler o que grandes hackers como ESR tm a dizer sobre Python: Eric S. Raymond o autor de 'A Catedral e o Bazar' e tambm o indivduo que cunhou o termo 'Open Source'. Ele diz que Python se tornou sua linguagem de programao favorita. Este artigo foi a real inspirao para meu primeiro contato com Python. Bruce Eckel o autor dos famosos livros 'Thinking in Java' e 'Thinking in C++'. Ele diz que nenhuma outra linguagem o deixou to produtivo quanto Python. Diz ainda que Python talvez a nica linguagem que se concentra em tornar as coisas mais fceis para o programador. Leia a entrevista completa para mais detalhes. Peter Norvig o conhecido autor do Lisp e Diretor de Qualidade de Busca no google (obrigado a Guido van Rossum por avisar). Ele diz que Python sempre foi parte integrante do Google. Esta afirmao pode ser comprovada verificando a pgina do Google Jobs que lista conhecimento em Python como requisito para os engenheiros de software.

Sobre Python 3.0


Python 3.0 a nova verso da linguagem que ser lanada em breve. Tambm conhecida como Python 3000 ou Py3k. A motivao principal para uma nova verso de Python remover todos os pequenos problemas e detalhes que foram se acumulando no decorrer dos anos e tornar a linguagem ainda mais limpa.

Se voc j tem muito cdigo Python 2.x, ento existe um utilitrio para ajudar na converso de cdigo 2.x para 3.x. Mais detalhes em: Introduo por Guido van Rossum O que h de novo no Python 2.6 (recursos significativamente diferentes das verses anteriores de Python 2.x e que provavelmente sero includos no Python 3.0) O que h de novo no Python 3.0 Cronograma de lanamento do Python 2.6 e 3.0 Python 3000 (a lista oficial de mudanas propostas) Planos diversos para Python 3.0 Novidades do Python (lista detalhada das mudanas)

Retrieved from "http://www.swaroopch.com/notes/Python_pt-br:Introducao" Category: A Byte of Python in Brazilian Copyright 2004-2011, Swaroop C H. Content is available under Creative Commons Attribution-Share Alike 3.0 Unported.

Python pt-br:Instalacao
From Notes
Se voc j tem o Python 2.x instalado, no preciso remov-lo para instalar o Python 3.0. Voc pode manter ambos instalados ao mesmo tempo.

Para usurios Linux e BSD


Se voc est usando uma distribuio Linux como Ubuntu, Fedora, OpenSUSE ou {coloque sua escolha aqu}, ou um sistema BSD tal como FreeBSD, ento provvel que voc j tenha o Python instalado em seu sistema. Para testar se o Python j est instalado em seu Linux, abra um shell (como konsole ou gnometerminal) e ento entre com o comando python -V como mostrado abaixo:
$ python -V Python 3.0b1

Nota $ o prompt do shell. Ele ser diferente para voc dependendo das configuraes do seu sistema operacional, portanto eu indicarei o prompt apenas pelo smbolo $. Se voc v alguma informao sobre a verso, como mostrado acima, ento o Python j est instalado. Contudo, se voc obter uma mensagem como esta:
$ python -V bash: Python: command not found

Ento o Python no est instalado. Isto altamente improvvel, mas possvel. Neste caso, voc tem dois meios para instalar o Python em seu sistema: Voc pode compilar o cdigo fonte do Python e ento instal-lo. As instrues para a compilao so informadas no website do Python. Instalar os pacotes binrios usando um gerenciador de pacotes que vem com o seu sistema operacional, tal como apt-get no Ubuntu/Debian e outros Linux baseados em Debian, yum no Fedora, pkg_add no FreeBSD, etc. Voc precisar de uma conexo com a internet para usar este mtodo. Uma alternativa baixar os binrios de algum outro lugar e ento copi-los e instal-los em seu PC. [Esta opo estar disponvel aps o lanamento final do Python 3.0]

Para usurios Windows


Visite o site http://www.python.org/download/releases/3.0/ e baixe a ltima verso, que era a verso 3.0 beta 1, quando este livro foi escrito. Ele tem apenas 12.8 MB, o que bem compacto quando comparado com a maioria das outras linguagens ou programas. Cuidado Quando for dada a opo para voc desmarcar componentes opcionais, no desmaque nenhum! Alguns destes componentes podem ser teis para voc, especialmente IDLE. Um fato interessante que usurios Windows so os que mais baixam os arquivos do Python. claro que isso no fornece uma viso geral, uma vez que quase todos os usurios Linux j tm o Python instalado por padro em seus sistema.

Prompt do DOS

Se voc quer ser capaz de usar o Python da linha de comando do Windows, i.e. o prompt do DOS, ento voc precisa configurar a varivel PATH corretamente. 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 Sistema', ento selecione Editar e adicione ;C:\Python30 no fim do que j estiver l. claro que voc deve usar o diretrio correto onde voc instalou o Python. Para verses antigas do Windows, adicione as seguintes linhas no arquivo C:\AUTOEXEC.BAT : 'PATH=%PATH%;C:\Python30' (sem as aspas) e reinicie o sistema. Em Windows NT use o arquivo AUTOEXEC.NT.

Para usurios MAC OS X


Usurios Mac OS X j encontraro o Python instalado em seu sistema. Abra o Terminal.app e rode python - V, e siga os conselhos da seo para usurios Linux.

Sumrio
Em um sistema Linux, provvel que voc j tenha o Python instalado. Caso contrrio, voc pode instal-lo usando o gerenciador de pacotes que vem com sua distribuio. Em um sistema Windows, instalar o Python to fcil como baixar o instalador e clicar duas vezes sobre ele. Daqui para frente ns assumiremos que voc j est com o Python instalado em seu sistema. A seguir ns escreveremos nosso primeiro programa em Python.

Retrieved from "http://www.swaroopch.com/notes/Python_pt-br:Instalacao" Category: A Byte of Python in Brazilian Copyright 2004-2011, Swaroop C H. Content is available under Creative Commons Attribution-Share Alike 3.0 Unported.

Python pt-br:Primeiros Passos


From Notes

Introduo
Ns veremos agora como rodar o tradicional programa 'Ol Mundo' em Python. Isto ensinar a voc como escrever, salvar e rodar programas no Python. H duas formas de usar o Python para rodar um programa - usando o prompt do interpretador interativo ou usando um arquivo fonte. Ns veremos como usar os dois mtodos.

Usando o Prompt do Interpretador


Inicie o interpretador na linha de comando digitando python prompt do shell. Em sistemas Windows, voc pode rodar o interpretador na linha de comando se a varivel PATH estiver corretamente configurada. Se voc est usando o IDLE, clique em Iniciar Programas Python 3.0 IDLE (Python GUI). Agora digite print('Ol Mundo') e em seguida pressione a tecla Enter. Voc ver as palavras Ol Mundo como sada.
$ 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 Python mostra a sada da linha imediatamente! O que voc acabou de digitar uma simples instruo. Ns usamos print para imprimir qualquer valor que voc fornea. Aqui, ns estamos fornecendo o texto Ol Mundo e este imediatamente impresso na tela. Como Sair do Interpretador 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 tecla enter.

Escolhendo um Editor
Antes de comearmos a escrever programas em arquivos fonte, ns precisamos de um editor para escrever estes arquivos. A escolha de um editor crucial. Voc deve escolher o editor como se voc fosse escolher um carro novo. Um bom editor o ajudar a escrever programas para Python facilmente, fazendo sua jornada mais confortvel e te ajudando a chegar em seu destino (atingindo seu objetivo) de uma forma fcil e segura. Uma das necessidades mais bsicas o destaque de sintaxe que torna colorida todas as diferentes partes de seu programa, de forma que voc possa ver seu programa e visualizar seu funcionamento. Se voc est usando o Windows, eu sugiro que voc use o IDLE. O IDLE destaca a sintaxe e permite que voc rode seus programas dentro dele mesmo, alm de fazer outras coisas. Uma observao especial: No use o Notepad - uma m escolha pois ele no destaca a sintaxe e tambm no tem suporte a indentao do texto, que muito importante no nosso caso, como veremos adiante. Bons editores tais como o IDLE (e tambm o VIM) automaticamente o ajudaro a fazer isso. Se voc est usando Linux/FreeBSD, ento voc tem diversas escolhas para um editor. Se voc um programador experiente, ento voc j deve estar usando Vim ou Emacs. desnecessrio dizer que estes so dois dos mais poderosos editores e que voc ser beneficiado por us-los para escrever seus programas em Python. Eu pessoalmente uso Vim para a maioria de meus programas. Se voc um programador iniciante, voc pode usar o Kate, que um dos meus favoritos. No caso de voc ter

tempo para aprender Vim ou Emacs, ento eu realmente recomendo que voc aprenda a usar um deles, pois ser de grande utilidade para voc em sua longa jornada. Neste livro, ns usaremos o IDLE, nosso IDE (Integrated Development Environment - Ambiente Integrado de Desenvolvimento) como editor. O IDLE instalado por padro com os instaladores Python para Windows e Mac OS X. Ele tambm est disponvel para instalao em Linux e BSDs nos seus respectivos repositrios. Ns exploraremos como usar o IDLE na prxima seo. Para mais detalhes, por favor veja a documentao do IDLE. Se voc ainda deseja explorar outras escolhas para um editor, veja a ampla lista de editores para Python e faa sua escolha. Voc tambm pode escolher um IDE para Python. Veja a ampla lista de IDEs que suportam Python para mais detalhes. Uma vez que voc passe a escrever grandes programas em Python, IDEs podem ser muito teis. Eu repito novamente, por favor escolha um editor apropriado - ele pode fazer a elaborao de programas em Python mais fcil e divertida. Para usurios do Vim H uma boa introduo sobre como tornar o Vim um poderoso IDE para Python por John M Anderson. Para usurios do Emacs H uma boa introduo sobre como tornar o Emacs um poderoso IDE para Python por Ryan McGuire.

Usando um Arquivo Fonte


Agora vamos voltar a programao. H uma tradio de que quando voc aprende uma nova linguagem de programao, o primeiro programa que voc escreve e roda o 'Ol Mundo' - tudo que ele faz apenas dizer 'Ol Mundo' quando voc o roda. Como Simon Cozens [1] diz, ele uma 'tradicional invocao para os deuses da programao ajudarem voc a aprender melhor a linguagem' :) . Inicie o editor escolhido, digite o seguinte programa e salve-o como olamundo.py Se voc est usando o IDLE, clique sobre File New Window e ento entre com o seguinte programa. Ento clique sobre File Save. #!/usr/bin/python #Filename: olamundo.py print('Ol Mundo') Rode este programa abrindo o shell (terminal Linux ou prompt do DOS) e entre com o comando python olamundo.py. Se voc est usando o IDLE, use o menu Run Run Module ou o atalho F5. A sada semelhante a seguinte:
$ python olamundo.py Ol Mundo

Se voc obter uma sada como acima, parabns! - voc rodou com sucesso seu primeiro programa para Python. No caso de um erro, pro favor digite o programa acima exatamente como mostrado e rode o programa novamente. Note que Python case-sensitive i.e. print no o mesmo que Print - note o p minsculo na primeira instruo e o P maisculo na segunda. Alm disso, assegure-se que no haja espaos ou tabulaes antes do primeiro carcter de cada linha - ns veremos por que isso importante mais tarde.

Como ele Funciona

Vamos considerar as duas primeiras linhas do programa. Elas so chamadas de comentrios qualquer coisa a direita do smbolo # um comentrio e usado principalmente como notas para o leitor do programa. Python no usa os comentrio, exceto para o caso especial da primeira linha. Ela chamada de linha de organizao - sempre que os dois primeiros caracteres do arquivo fonte so #! seguidos pela localizao de um programa, isto diz para seu sistema Linux/Unix que este programa deve ser rodado com este interpretador quando voc executar o programa. Isto explicado em detalhes na prxima seo. Note que voc sempre pode rodar o programa em qualquer plataforma especificando o interpretador diretamente na linha de comando, como o comando python olamundo.py . Importante Use comentrio em seu programa de forma sensata, para explicar algum detalhe importante de seu programa - isto til para que os leitores de seu programa possam entender facilmente o que ele est fazendo. Lembre-se, est pessoa pode ser voc mesmo depois de seis meses! Os comentrio so seguidos por uma instruo de Python. Aqui ns chamamos a funo print que apenas imprime o texto 'Ol Mundo'. Ns aprenderemos sobre funes em um captulo posterior, o que voc deve entender agora que o que voc colocar nos parnteses ser impresso na tela. Neste caso, ns fornecemos 'Ol Mundo' que se refere a uma string - no se preocupe, ns vamos explorar essas terminologias em detalhes mais tarde.

Programas Executveis em Python


Isto funciona apenas para usurios Linux/Unix, mas usurios do Windows podem estar curiosos sobre a primeira linha do programa. Inicialmente, devemos dar ao programa a permisso para executar usando o comando chmod e ento rodar o programa fonte.
$ 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 todos ('a'll) os usurio do sistema o executar (e'x'ecute). Ento, ns executamos o programa diretamente especificando a localizao do arquivo fonte. Ns usamos o ./ para indicar que o programa est no diretrio atual. Para tornar as coisas mais divertidas, voc pode renomear o arquivo para olamundo e rod-lo com ./olamundo e ele ainda funcionar, uma vez que o sistema sabe que ele tem de rodar o programa usando o interpretador cuja localizao especificada na primeira linha do arquivo fonte. Agora voc capaz de rodar o programa desde que voc conhea o caminho exato para o arquivo fonte - mas e se voc desejar rodar o arquivo de qualquer lugar? Voc pode fazer isso armazenando o programa em um dos diretrios listados na varivel de ambiente PATH. Sempre que voc roda qualquer programa, o sistema procura por aquele programa em cada diretrio listado na varivel de ambiente PATHe ento roda aquele programa. Ns podemos tornar este programa disponvel em qualquer lugar simplesmente copiando este arquivo fonte para um dos diretrios listados 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 mostrar a varivel PATH usando o comando echo e incluindo o prefixo $ para indicar para o shell que ns precisamos do valor desta varivel. Ns vemos que /home/swaroop/bin um dos diretrios na varivel PATH onde swaroop o nome de usurio que eu estou usando em meu sistema. Provavelmente existe um diretrio similar para seu nome de usurio para seu sistema. Alternativamente, voc pode adicionar um diretrio de sua escolha para a varivel PATH - isto pode ser feito rodando PATH=$PATH:/home/swaroop/mydir onde '/home/swaroop/mydir' o diretrio que eu desejo adicionar na varivel PATH.

Este mtodo muito til se voc deseja escrever scripts teis que voc queira rodar de qualquer lugar, a qualquer hora. como criar seu prprio comando, semelhante ao cd ou qualquer outro comando que voc use no terminal linux ou no prompt do DOS. Cuidado Em Python, um programa ou um script significam a mesma coisa.

Obtendo Ajuda
Se voc precisar de informao sobre alguma funo ou instruo em Python, ento voc pode usar a funo embutida help. Isto muito til especialmente quando estiver usando o prompt do interpretador. Por exemplo, rode help(print) - isto mostra a ajuda para a funo print que usada para imprimir coisas na tela. Nota Pressione q para sair da ajuda. De forma similar, voc pode obter informao sobre quase qualquer coisa em Python. Use help() para aprender mais usando o prprio help! No caso de voc precisar de ajuda para operadores como return, ento voc deve coloc-los dentro de aspas como em help('return') dessa forma Python no se confunde com o que ns queremos fazer.

Sumrio
Agora voc capaz ou de escrever,salvar e rodar programas em Python facilmente. Agora que voc um usurio Python, vamos aprender alguns conceitos de Python.

References: 1. O autor do maravilhoso livro 'Beginning Perl'

Retrieved from "http://www.swaroopch.com/notes/Python_pt-br:Primeiros_Passos" Category: A Byte of Python in Brazilian Copyright 2004-2011, Swaroop C H. Content is available under Creative Commons Attribution-Share Alike 3.0 Unported.

Python pt-br:Fundamentos
From Notes
Imprimir 'Ol mundo' no suficiente, ou ? Voc quer fazer mais que isso - voc quer inserir dados, manipul-los e obter alguma resposta a partir deles. Ns podemos conseguir isso em Python usando constantes e variveis.

Constantes Literais
Um exemplo de uma constante literal um nmero como 5, 1.23, 9.25e-3 ou uma string (sequncia de caracteres) como 'Esta uma string' ou " uma string!". Ela denominada literal porque literal voc usa seu valor literalmente. O nmero 2 sempre representa a si mesmo e nada alm disso - ele uma constante pois seu valor no pode ser mudado. Logo, todos esses valores referem-se a constantes literais.

Nmeros
Os nmeros em Python so so de trs tipos - inteiros, ponto flutuante e complexos. 2 um exemplo de inteiro, os inteiros so os nmeros redondos. 3.23 e 52.3E-4 so exemplos de nmeros de ponto flutuante (ou floats, para abreviar). A notao E indica as potncias de 10. Neste caso, 52.3E-4 significa 52.3 * 10-4. (-5+4j) e (2.3 - 4.6j) so exemplos de nmeros complexos. Nota para programadores experientes No h o tipo 'long int' (inteiro longo) em separado. O tipo inteiro padro pode assumir qualquer valor grande.

Strings
Uma string uma sequncia de caracteres. As strings so basicamente um amontoado de palavras. As palavras podem estar em ingls ou em qualquer lngua que seja suportada pelo padro Unicode, que atende a quase todas as lnguas do mundo. Nota para programadores experientes No h strings "somente em ASCII" porque o padro Unicode engloba o ASCII. Por conveno, todas as stringas esto em UTF-8. Eu posso garantir que voc usar strings em quase todos os programas que escrever em Python, portanto preste ateno prxima parte sobre como usar strings em Python.

Aspas Unitrias
Voc pode especificar as strings usando aspas unitrias (ou apstrofes) tais como 'Use aspas unitrias em mim'. Todos os espaos em branco, isto , espaos e tabulaes so preservados no estado em que se encontram.

Aspas Duplas
As strings em aspas duplas trabalham exatamente da mesma maneira que as strings em aspas unitrias. Eis um exemplo: "Qual o seu nome?"

Aspas Triplas
Voc pode especificar strings que ocupam vrias linhas usando aspas triplas - (""" ou '''). Voc pode usar aspas unitrias e aspas duplas livremente para formar as aspas triplas. 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 obter uma string que contenha um apstrofe ('), como voc escrever essa string? Por exemplo, a string What's your name?. Voc no pode escrever 'What's your name?' porque o Python ficar confuso sobre onde a string comea e onde termina. Logo, voc ter que especificar que este apstrofe no indica o fim da string. Isso pode ser feito com a ajuda do que denominada uma sequncia de escape. Voc especifica o apstrofe como \' - note a barra invertida. Agora, voc pode escrever a string como 'What\'s your name?'. Uma outra maneira de escrever essa string especfica seria "What's your name?", isto , usando aspas duplas. Da mesma maneira, voc pode usar uma sequncia de escape para inserir aspas duplas em uma string limitada por aspas duplas. Voc tambm pode inserir a prpria barra invertida usando a seqncia de escape \\. O que fazer se voc quer escrever uma string de duas linhas? Uma soluo usar uma string limitada por aspas triplas conforme foi ensinado previamente ou voc pode utilizar uma seqncia de escape para o caracter de nova linha - \n para indicar o incio da nova linha. Eis um exemplo, Essa a primeira linha\nEssa a segunda linha. Uma outra seqncia de escape til a ser conhecida a tabulao - \t. H muitas outras seqncias de escape, mas eu mencionei aqui somente as mais teis. importante observar que numa string, uma nica barra invertida no fim da linha indica que a string continua 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 strings onde nenhum processamento especial tais como as seqncias de escape so manipuladas, ento o que voc precisa escrever uma string bruta prefixando um r ou um R string . Eis um exemplo, r"Novas linhas so indicadas por \n".

Strings So Imutveis
Isso significa que uma vez que voc tenha criado uma string, voc no pode mud-la. Embora isso parea como algo ruim, no realmente. Ns veremos porque isso no uma limitao nos diversos programas que ns analisaremos mais adiante.

Concatenao de Literais do Tipo String


Se voc colocar duas strings literais lado a lado, elas so automaticamente concatenadas pelo Python. Por exemplo, 'Qual ' 'o seu nome?' automaticamente convertido em "Qual o seu nome?". Nota para programadores C/C++ No h tipo de dado char (caracter) separado em Python. No existe nenhum motivo real para isto e eu tenho certeza que voc no esquecer isto. Nota para programadores Perl/PHP Lembre-se que strings com aspas simples e duplas so a mesma coisa - elas no diferem entre si Nota para Usurios de Expresso Regular

Sempre use strings brutas quando estiver manipulando expresses regulares. Do contrrio, ser necessrio muito uso de caracteres de escape. Por exemplo, referncias a barras invertidas podem ser feitas como '\\1' ou r'\1'.

O mtodo 'format'
As vezes ns iremos querer construir strings de uma outra informao. Isto onde o mtodo format() til #!/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)) Sada:
$ python str_format.py Swaroop is 25 years old Why is Swaroop playing with that python?

Como isto funciona: Uma string pode utilizar certas especificaes e sub consequentemente, o mtodo format pode ser chamado de um substituto para estas especificaes correspondendo os argumentos ao mtodo format. Observe que est a primeira vez que usamos {0} e isto corresponde vriavel name que o primeiro argumento ao mtodo 'format'. Similarmente, a segunda especificao {1} que corresponde age que o segundo argumento ao mtodo 'format'. O que o Python faz aqui substituir cada valor do argumento no lugar da especificao. Que pode ter especificaes mais detalhadas 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 wi '___hello___' >>> '{name} wrote {book}'.format(name='Swaroop', book='A Byte of Python') # keyword-based 'Swaroop wrote A Byte of Python' Detalhes desta especificao de formatao so explicados na Python Enhancement Proposal No. 3101. File:Example.jpg

Variveis
Usar apenas constantes literais pode se tornar algo chato - ns precisamos de alguma maneira de armazenar qualquer informao, bem como manipul-la. a onde as variveis entram na jogada. Variveis so exatamento o que seu nome significa - seu valor pode variar, isto , vce pode armazenar qualquer coisa usando uma varivel. Variveis so apenas partes da memria do seu computador nas quais voc armazena alguma informao. Diferentemente das constantes literais, voc precisa de alguma maneira de acessar estas variveis e, portanto, voc d nomes a elas.

Nomenclatura de Identificadores
Variveis so exemplos de identificadores. Identificadores so nomes dados de maneira a identificar algo. Existem algumas regras que voc ter que seguir para dar nome aos identificadores: O primeiro caracter do identificador precisa ser uma letra do alfabeto (maisculo ASCII ou minsculo ASCII ou caracter Unicode) ou um underscore ('_'). O restante do nome do identificador pode consistir de letras (maisculo ASCII ou minsculo ASCII

ou caracter Unicode), underscores ('_') ou dgitos (0-9). Nomes de idenficadores so case-sensitive. Por exemplo, myname e myName no so o mesmo. Note o minsculo n no primeiro e o maisculo N no segundo. Exemplos de nomes de identificadores 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 manter valores de diferentes tipos, chamados de tipos de dados. Os tipos bsicos so nmeros e strings, que ns j discutimos. Nos prximos captulos, veremos como criar seus prprios tipos usando classes.

Objetos
Lembre-se de que Python se refere a qualquer coisa usada em um programa como um objeto, em sentido geral. Ao invs de dizer 'o alguma coisa', ns de dizemos 'o objeto'. Nota para os usurios de Programao Orientada a Objetos Python fortemente orientada a objetos, no sentido que tudo um objeto, incluindo nmeros, strings e funes. Agora veremos como usar variveis juntamento com constantes literais. Salve o exemplo a seguir e execute o programa. Como escrever programas em Python Daqui em diante, o procedimento padro para salvar e executar um programa Python a seguinte: 1. Abra o seu editor favorito. 2. Digite o cdigo do programa dado no exemplo. 3. Salve-o como um arquivo com o nome mencionado no comentrio. Eu sigo a conveno de ter todos os programas em Python salvos com a extenso .py. 4. Execute o interpretador com o comando python program.py ou use o IDLE para executar os programas. Voc tambm pode usar o mtodo executvel como explicado anteriormente.

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) Output:
$ python var.py 5 6 Esta uma string de mltiplas linhas.

Esta a segunda linha.

Como funciona: Como funciona: Veja como este programa funciona. Primeiro, vamos atribuir o valor constante literal 5 varivel i com o operador de atribuio (=). Esta linha chamada de instruo, pois indica que algo deve ser feito e neste caso, ns estamos conectando o nome da varivel i ao valor 5. Em seguida, imprimimos o valor de i com o comando print, que, obviamente, apenas imprime o valor da varivel na tela. Ento somamos 1 ao valor armazenado em i e armazenmos de volta. Em seguida, imprimimos e, como esperado, obtemos o valor tt>6</tt>. Da mesma forma, atribumos a string literal para a varivel s e depois a imprimimos. Nota para programadores de linguagens estticas As variveis so usadas simplesmente atribuindo-lhes um valor. Nenhuma declarao ou definio de tipo de dados necessria ou utilizada.

Linhas Lgicas e Fsicas


Uma linha fsica aquela que voc v quando escreve o programa. Uma linha lgica que o Python v como uma nica instruo. Python implicitamente assume que cada linha fsica corresponde a uma linha lgica. Um exemplo de uma linha lgica uma instruo como print('Hello World') - se este estava em uma linha por si s (como voc v no editor), ento isso tambm corresponde a uma linha fsica. Implicitamente, Python incentiva o uso de uma nica instruo por linha, o que torna o cdigo mais legvel. Se voc quiser especificar mais de uma linha lgica em uma nica linha fsica, ento voc tem que especificar explicitamente usando um ponto-e-vrgula (;) que indica o fim de uma linha lgica ou instruo. Por exemplo,
i = 5 print(i)

o mesmo que
i = 5; print(i);

e o mesmo pode ser escrito como


i = 5; print(i);

ou ainda
i = 5; print(i)

No entanto, eu recomendo fortemente que voc se atenha a escrever somente uma nica linha lgica para cada linha fsica. Use mais de uma linha fsica para uma nica linha lgica apenas se a linha lgica for realmente comprida. A ideia evitar o ponto-e-vrgula tanto quanto possvel, uma vez que isso conduz a um cdigo mais legvel. De fato, eu nunca utilizei ou sequer vi um ponto-e-vrgula num programa Python. Segue um exemplo da escrita de uma linha lgica se estendendo por muitas linhas fsicas. Nos referimos a isso com juno explcita de linhas

s = 'Isto uma string. \ Isto continua a string.' print(s)

Isso nos d a sada:


Isto uma string. Isto continua a string.

Similarmente,
print\ (i)

o mesmo que
print(i)

Em alguns casos no necessrio utilizar barra invertida. Nesses casos a linha lgica usa parnteses, colchetes ou chaves. Isto se chama juno implcita de linha. Voc pode v-la em ao quando escrevermos programas usando listas em captulos posteriores.

Indentao
Espaos so importantes em Python. Na verdade, espaos no incio da linha so importantes. Isto chamado de indentao. Espaos (espaos e tabs) no incio da linha lgica so usados para determinar o nvel de indentao da linha lgica, o qual por sua vez usado para determinar o agrupamento de instrues Isto significa que as instrues que vo juntas devem ter a mesma indentao. Cada conjunto dessas instrues chamada de bloco. Veremos exemplos de como os blocos so importantes nos captulos seguintes. Uma coisa que voc deve lembrar que indentao 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 executa isso, obtm o seguinte 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 incio da segunda linha. O erro indicado pelo Python nos diz que a sintaxe do programa invlida, isto , o programa no foi escrito direito. O que isso quer dizer que voc no pode iniciar novos blocos de instrues arbitrariamente (exceto pelo bloco principal padro que voc vem usando o tempo todo, claro). Casos nos quais voc pode usar novos blocos sero detalhados em captulos posteriores, tais como o captulo sobre controle de fluxo. Como indentar No use uma mistura de tabs e espaos para a indentao, pois isso no funciona adequadamente em diferentes plataformas. Eu recomendo fortemente que voc use um nico tab ou quatro espaos para cada nvel de indentao.

Escolha qualquer um desses dois estilos de indentao. Mais importante, escolha um e use consistentemente, isto , use somente aquele estilo de indentao. Nota para programadores de linguagens estticas Python sempre utiliza indentao para blocos e nunca utiliza chaves. Execute from __future__ import braces para aprender mais.

Resumo
Agora que ns discutimos vrios detalhes vitais, podemos seguir para coisas mais interessantes como declaraes de controle de fluxo. Certifique-se de que voc j est confortvel com o que voc leu nesse captulo. Retrieved from "http://www.swaroopch.com/notes/Python_pt-br:Fundamentos" Category: A Byte of Python in Brazilian Copyright 2004-2011, Swaroop C H. Content is available under Creative Commons Attribution-Share Alike 3.0 Unported.

Python pt-br:Operadores e Expressoes


From Notes

Introduo
A maioria das instrues (linhas lgicas) que voc escrever iro conter 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 representados por smbolos como + ou por palavras-chave especiais. Operadores requerem dados para funcionar e tais dados so chamados operandos. Neste caso, 2 e 3 so os operandos.

Operadores
Iremos dar uma breve olhada nos operadores e sua utilizao: Perceba que voc pode testar as espresses dadas nos exemplos usando o interpretador interativo. Por exemplo, para testar a expresso 2 + 3, use o interpretador interativo do Python: >>> 2 + 3 5 >>> 3 * 5 15 >>> Operadores e sua utilizao Operador Nome Explicao Exemplos

Adio

Soma dois objetos

3 + 5 retorna 8. 'a' + 'b' retorna 'ab'.

Subtrao

Torna um nmero negativo ou a subtrao de um nmero por outro

-5.2 retorna um nmero negativo. 50 24 retorna 26.

Multiplicao

Retorna o produto de dois nmeros ou uma string repetida uma certa quantidade de vezes.

2 * 3 retorna 6. 'la' * 3 retorna 'lalala'.

**

Potncia

Retorna x elevado potncia de y

3 ** 4 retorna 81 (i.e. 3 * 3 * 3 * 3)

Diviso

Divide x por y

4 / 3 retorna 1.3333333333333333.

//

Diviso Inteira

Retorna a parte

4 // 3 retorna 1.

inteira do quociente

Modulo

Retorna o resto da diviso

8 % 3 retorna 2. -25.5 % 2.25 retorna 1.5.

<<

Deslocamento de bits esquerda

Desloca os bits do nmero para a esquerda pelo nmero de bits especificado. (Cada nmero representado na memria por bits ou digitos binrios i.e. 0 and 1)

2 << 2 retorna 8. 2 representado por 10 em bits. Deslocando os bits do nmero esquerda por 2 bits retorna 1000, que representa o nmero decimal 8.

>>

Deslocamento de bits direita

Desloca os bits do nmero para a direita pelo nmero de bits especificado.

11 >> 1 retorna 5. 11 representado em bits por 1011 que quando os bits so deslocados para a direita por 1 bit retorna 101, que o nmero decimal 5.

&

Operador bit a bit AND

Bits configurados nos dois operadores so configurados no resultado

5 & 3 retorna 1.

Operador bit a bit OR

Bits configurados em um ou outro operador so configurados no resultado

5 | 3 retorna 7

Operador bit a bit XOR

Bits configurados em um ou outro operador, mas no em ambos, so configurados no resultado

5 ^ 3 retorna 6

Operador bit a bit NOT

Bits configurados no operador no so configurados no resultado e viceversa.

~5 retorna -6.

Retorna se x menor que y. Todos os operadores de

5 < 3 retorna False e 3 < 5 retorna

<

Menor que

comparo retornam True(verdadeiro) ou False(falso). Note a capitalizao dos nomes.

True. Comparaes podem ser encadeadas arbitrariamente: 3 < 5 < 7 retorna True.

>

Maior que

Retorna se x maior que y

5 > 3 retorna True. Se os dois operadores forem nmeros, eles so antes convertidos a um tipo comum. De outra maneira, ser sempre retornado False.

<=

Menor ou igual a

Retorna se x menor ou igual a y

x = 3; y = 6; x <= y retorna True.

>=

Maior ou igual a

Retorna se x maior ou igual a y

x = 4; y = 3; x >= 3 retorna True.

x = 2; y = 2; x == y retorna True. == Igual a Compara se os objetos so iguais x = 'str'; y = 'stR'; x == y retorna False. x = 'str'; y = 'str'; x == y retorna True.

!=

Diferente de

Compara se os objetos so diferentes

x = 2; y = 3; x != y retorna True.

not

Operador booleano NOT

Se x True, ele retorna False. Se x False, ele retorna True.

x = True; not y retorna False.

and

Operador booleano AND

x and y retorna False se x False, seno ele retorna a avaliao de y

x = False; y = True; x and y retorna False desde que x seja False. Neste caso, Python no ir avaliar y desde que ele saiba que o lado esquerdo da espresso 'and' False o que implica que toda a espresso ser False independente do outro valor. isso chamado short-circuit evaluation.

or

Operador booleano OR

Se x True, ele retorna True, seno ele retorna a avaliao de y

x = True; y = False; x or y retorna True. A Short-circuit evaluation se aplica aqui tambm.

Precendncia de Operadores
Se voc tem uma expresso como 2 + 3 * 4, ser realizada primeiro a adio ou a multiplicao? A matemtica do nosso ensino mdio nos diz que a multiplicao deve ser realizada primeiro. Isso significa que o operador de multiplicao possui maior precedncia que o operador de adio. A tabela a seguir nos d a ordem de precedncia de operadores para o Python, do de menor precedncia (least binding) ao de maior precedncia (most binding). Isto significa que em uma dada expresso, Python ir primeiramente avaliar os operadores listados na base da tabela antes dos operadores listados ao topo. A tabela a seguir (tirada de Manual de referncia Python) proporcionada visando maior entendimento. muito melhor usar parnteses para agrupar operadores e operandos apropriadamente de maneira que fique clara a precedncia. Isso torna o programa mais legvel. Veja #Ordem de Avaliao abaixo para detalhes. Precedncia de Operadores Operador Descrio

lambda

Expresso Lambda

or

Operador Booleano OR

and

Operador Booleano AND

not x

Operador Booleano NOT

in, not in

Testes de membros/existncia

is, is not

Testes de identidade

<, <=, >, >=, !=, ==

Comparaes

Operador bit-a-bit OR

Operador bit-a-bit XOR

&

Operador bit-a-bit AND

<<, >>

Deslocamentos de bits

+, -

Adio e subtrao

*, /, //, %

Multiplicao, Diviso, Diviso inteira e Resto

+x, -x

Positivo, Negativo

~x

Operador bit-a-bit NOT

**

Exponenciao

x.atributo

Referencia a atributo

x[ndice]

Subscrio

x[ndice1:ndice2]

Repartio

f(argumentos ...)

Chamada de funo

(expresses, ...)

Uniao ou exibio de tupla

[expresses, ...]

Exibio de listas

{chave:dado, ...}

Exibio de dicionrio

Os operadores que ainda no vimos sero explicados em captulos posteriores. Operadores com a mesma precedncia so listados na mesma linha na tabela acima. Por exemplo, + e - possuem a mesma precedncia.

Ordem de avaliao
Por padro, a tabela de precedncia dos operadores decide que operadores so avaliados primeiro. Para tornar uma expresso mais legvel podemos usar parnteses. Por exemplo, 2 + (3 * 4) , definitivamente, mais fcil de entender que 2 + 3 * 4 que requer conhecimento da ordem de precedncia dos operadores. Assim como todo o resto, parnteses devem ser usados conscientemente (no sobrecarregue) e no devem ser redundantes (como em 2 + (3 + 4)). Se voc quer mudar a ordem em que eles so avaliados, voc pode, novamente, usar parnteses. Por exemplo, se voc quer que a adio seja realizada antes da multiplicao em uma expresso, ento voc pode escrever algo como (2 + 3) * 4.

Associatividade
Operadores so, geralmente, associados da esquerda para a direita, isto , operadores com a mesma procedncia so avaliados da esquerda para a direita. Por exemplo, 2 + 3 + 4 avaliado como (2 + 3) + 4. Alguns operadores, como os de atribuio, possuem a associatividade da direira para a

esquerda, isto , a = b = c tratado 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)) Sada:
$ python expressao.py rea 10 Perimetro 14

Como Funciona: O tamanho e amplitude do retngulo so armazenados nas variveis length e breadth. Ns os utilizamos para calcular a rea e o permetro do retngulo com a ajuda de expresses. Armazenamos o resultado da expresso length * breadth na varivel area e ento o imprimimos usando a funo print. No segundo caso, usamos o valor da expresso 2 * (length + breadth) diretamente na funo print. Perceba, tambm, como o Python faz a 'impresso elegante' (pretty-print) da sada. Mesmo que no tenhamos especificao um espao entre 'rea ' e a varivel area, Python coloca-o para ns de uma maneira que tenhamos uma sada limpa e bonita, e o programa muito mais legvel dessa maneira (desde que no tenhamos que nos preocupar com espaamento na string que utilizamos para a sada). Isto um exemplo de como o Python torna mais fcil a vida do programador.

Sumrio
Vimos como utilizar operadores, operandos e expresses - estes so os blocos de construo bsicos de qualquer programa. A seguir, veremos como fazer uso deles em nossos programas atravs de indicao.

Retrieved from "http://www.swaroopch.com/notes/Python_pt-br:Operadores_e_Expressoes" Category: A Byte of Python in Brazilian Copyright 2004-2011, Swaroop C H. Content is available under Creative Commons Attribution-Share Alike 3.0 Unported.

Python pt-br:Controle de Fluxo


From Notes

Introduo
Nos programas que vimos at agora, houveram uma srie de declaraes e o Python executa-os na mesma ordem. E se voc quisesse alterar o fluxo de seu funcionamento? Por exemplo, voc quer que o programa tome algumas decises e faa diferentes coisas dependendo das diferentes situaes, como imprimir 'Bom Dia' ou 'Boa Tarde' dependendo da hora do dia? Como voc deve ter pensando, isto alcanado usando as instrues de controle de fluxo no Python if, for e while.

A instruo IF
A instruo if usada para verificar uma condio e se a condio verdadeira, ser executado um bloco de instrues (chamado de bloco-if(if-block)), seno ser processado outro bloco de instrues (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 Sada:
$ 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: Neste programa, recebemos tentativas de advinhaes do usurio e verificamos se este igual ao nmero que temos. Setamos a varivel number para qualquer inteiro que desejarmos, digamos 23. Ento, pegamos a tentativa de advinhao do usurio usando a funo input(). Funes so peas de programas reutilizveis. Iremos ler mais sobre elas no prximo captulo. Ns fornecemos uma string para funo enbutida input que a imprime na tela e aguarda uma entrada do usurio. Uma vez que entramos com algum valor e apertamos a tecla enter, a funo input() retorna o valor que entramos, como uma string. Ns, ento, convetemos essa string para um inteiro usando int e depois armazenamos na varivel guess. Na verdade, o int uma classe, mas tudo o que vo precisa saber agora que voc pode us-la para converter uma string em um nmero inteiro (assumindo que a string contm um nmero inteiro vlido no texto). A seguir, comparamos a tentativa de adivinhao do usurio com o nmero que escolhemos. Se eles forem iguais, imprimimos uma mensagem de sucesso. Note que utilizamos nveis de indentaopara dizer ao Python que instrues pertencem a qual bloco. pos isso que a indentao to importante no Python. Eu espero que voc esteja mantendo a regra da "indentao consistente". Voc est? Perceba que a instruo if contm 'dois pontos' no final - ns estamos indicando ao Python que a seguir h um bloco de instrues. Ento, checamos se a tentativa de advinhao do usurio menor que o nmero da varivel number, e se for verdadeiro, informamos ao usurio para tentar com um nmero um pouco maior que o inserido. O que usamos aqui a clausula elif que, na verdade, combina duas instrues if else-if else relacionadas em uma instruo if-elif-else combinada. Isso torna o programa mais fcil e reduz quantidade de indentaes requeridas. As instrues elif else devem, tambm, possuir 'dois pontos' no final da linha lgica, seguido pelo seu bloco de instrues correspondente (com indentao apropriada, claro). Voc pode ter outra instruo if dentro de um bloco-if de uma instruo if if a assim por diante - isto chamado de instruo if aninhada Lembre que as partes elif e else so opcionais. Uma instruo if mnima vlida : if True: print('Sim, verdadeiro') Depois que python terminou de executar a instruo if completamente, junto com as clusulas elif e else associadas, ele passa para a prxima instruo no bloco contendo a instruo if. Neste caso, o bloco principal onde a execuo do programa inicia e a prxima instruo print('Feito'). Depois disso, Python v o final do programa e simplesmente termina. Ainda que este seja um programa muito simples, eu estive apontando vrias coisas que voc deve notar em programas assim. Todas elas so bem avanadas (e surpreendentemente simples para todos vocs com conhecimento em C/C++) e requerem que voc esteja inicialmente ciente de todas elas, mas depois disso, voc ir se familiarizar e isso ir se tornar 'natural' para voc. Nota para os programadores de C/C++ No h a instruo switch no Python. Voc pode usar uma instruo if..elif..else para fazer a mesma coisa (e em alguns casos, usar um dicionrio para faz-lo rapidamente)

A instruo while
A instruo while permite que voc execute repetidamente um bloco de instrues enquanto uma condio for verdadeira. Uma instruo while um exemplo do que chamado de instruo de looping. Uma instruo while pode ter 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') Sada:
$ 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: Neste programa, ns ainda estamos jogando o jogo da advinhao, mas a vantagem que o usurio pode continuar tentando advinhar at que ele acerte o nmero - no ha necessidade de rodar novamente o programa para cada tentativa de adivinhao, como fizemos na seo anterior. Isto demonstra o uso da instruo while. Ns movemos oinput e a instruo if para dentro do loop while e setamos a varivel running para True antes do loop while. Primeiro, ns checamos se a varivel running True(verdadeiro) e ento seguimos para executar executar o <emphasis>bloco while</emphasis> correspondente. Depois que o bloco executado, a condio novamente checada que neste caso a varivel running. Se isso verdade, ns executamos o bloco while novamente, seno continuamos para executar o bloco else optional e ento seguir para a prxima instruo. O bloco else executado quando a condio do loop while se torna False(falso) - esta pode at ser a primeira vez que a condio verificada. Se h alguma clusula else para um loop while, ele sempre executado a menos que voc tenha um loop while que se executado para sempre sem sair sequer uma vez! Os valores True(verdadeiro) e False(falso) so chamados tipos Booleanos e voc pode consider-los equivalentes aos valores 1 e 0 respectivamente. O bloco else , na verdade, redundante a partir que voc pode colocar estas instrues no mesmo bloco (como a instruo while) depois da instruo while para conseguir o mesmo efeito. Nota para programadores de C/C++ Lembre que voc pode ter uma clusula else else para o loop while.

O loop for

A instruo for..in outra instruo de loop que itera sobre uma sequncia de objetos, por exemplo, percorre cada item em uma sequncia. Iremos ver mais sobre sequncias em detalhes em captlos posteriores. O que voc precisa saber agora que uma sequncia apenas uma coleo ordenada de itens. Exemplo: #!/usr/bin/python # Nome do arquivo: for.py for i in range(1, 5): print(i) else: print('O loop for terminou.') Sada:
$ python for.py 1 2 3 4 O loop for terminou.

Como funciona: Neste programa, estamos imprimindo uma sequncia de nmeros. Ns geramos esta sequncia de nmeros usando a funo interna range. O que fazemos fornecer dois nmeros e range retorna 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 contando de 1 em 1. Se fornecer-mos um terceiro nmero para range, ento ele se torna o tamanho do passo. Por exemplo, range(1,5,2) nos d [1,3]. Lembre-se que range extende-se at o segundo nmero, ou seja, ele no inclui o segundo nmero. O loop for ento itera sobre esta faixa - for i in range(1,5) equivalente a for i in [1, 2, 3, 4] que a mesma coisa que atribuir cada nmero (ou objeto) na sequncia a i, um de cada vez, e ento executar o bloco de instries para cada valor de i. Neste caso, ns apenas imprimimos o valor no bloco de instrues. Lembre-se que a parte else opcional. Quando includa, ela ser sempre executada uma vez aps o loop for ter terminado, a no ser que uma instruo break seja encontrada. Lembre-se que o loop for..in funciona para qualquer sequncia. Aqui, temos uma lista de nmeros gerados pela funo interna range, mas, no geral, podemos usar qualquer tipo de sequncia de qualquer tipo de objeto! Iremos explorar essa idia em detalhes em captulos posteriores. Nota para programadores de C/C++/Java/C# O loop for do Python radicalmente diferente do loop for das linguagens C/C++. Programadores da linguagem C# iro notar que o loop for no Python similar ao loop foreach em C#. Programadores da linguagem Java iro notar 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++), ento em Python 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 Python.

A instruo break
A instruo break usada para quebrar uma instruo de loop, ou seja, para a execuo de uma instruo de loop, mesmo que a condio no tenha se tornado False ou a sequncia de itens tenha sido iterada completamente. Uma informao importante que se voc quebra um loop for ou while, qualquer bloco else

correspondente no executado. 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') Sada:
$ 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: Tamanho da string 12 Entre com alguma coisa: sair Feito use Python!

Como funciona: Neste programa, ns recebemos os dados de entrada do usurio repetidamente e imprimimos o tamanho de cada entrada toda vez. Estamos provendo uma condio especial para parar o programa verificando se a entrada do usurio 'sair'. Paramos o programa com <emphasis>break</emphasis>, fazendo com que saiamos do loop e alcancemos o fim do programa. O tamanho da entrada pode ser encontrado utilizando a funo interna len. Lembre-se que a instruo break pode tambm ser usada com o loop for.

Python Potico do Swaroop


Os dados de entrada que utilizei aqui um mini poema que escrevi chamado Python Potico do Swaroop:
Programar divertido Quando o trabalho est feito se voc quer tornar seu trabalho tambm divertido: use Python!

A Instruo continue
A instruo continue usada para dizer ao Python que pule as intrues restantes do bloco de loop corrente e para continuar (continue) na iterao seguinte 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... Sada:
$ 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: Neste programa, aceitamos entradas do usurio, mas as processamos somente se ela possurem pelo menos 3 caracteres. Ento, utilizamos a funo interna len para pegar o tamanho e se este for menor que 3, pulamos o resto das instrues no bloco utilizando a instruo continue. Seno, o resto das instrues no loop so executadas e poderemos fazer qualquer tipo de processamento que quiser-mos aqui. Note que a instruo continue funciona, tambm, com o loop for.

Sumrio
Vimos como utilizar as trs instrues de controle de fluxo - if, while and for, em conjunto com suas instrues break e continue associadas. Estas so algumas das partes mais utilizadas do Python e outras, tornar-se confortvel com elas essencial. --Retrieved from "http://www.swaroopch.com/notes/Python_pt-br:Controle_de_Fluxo" Category: A Byte of Python in Brazilian Copyright 2004-2011, Swaroop C H. Content is available under Creative Commons Attribution-Share Alike 3.0 Unported.

Python pt-br:Funcoes
From Notes

Introduo
Funes so pedaos reutilizveis de programas. Elas permitem dar um nome para um bloco de cdigo e rod-lo usando seu nome em qualquer lugar do programa, quantas vezes forem necessrias. Isto conhecido como chamar a funo. Ns j usamos muitas funes internas como len e range. O conceito de funo provavelmente o bloco de construo mais importante de qualquer programa no-trivial (em qualquer linguagem de programao), portanto vamos explorar vrios aspectos das funes neste captulo. Funes so definidas usando a palavra-chave def. A mesma seguida pelo seu nome identificador, um par de parnteses que podem conter ou no nomes de variveis separados por vrgula, e por dois pontos ao final da linha. Em seguida o bloco de cdigo que faz parte desta funo. Um exemplo abaixo ir mostrar que isto realmente muito 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 Output:
$ python funcao.py Ol Mundo! Ol Mundo!

Como isto funciona: Definimos a funo chamada digaOla usando a sintaxe como explicado abaixo. Esta funo no recebe parmetros e conseqentemente no h variveis declaradas entre parnteses. Para as funes, parmetros so somente uma entrada que podemos passar diferentes valores e receber resultados correspondentes. Repare que podemos chamar a mesma funo duas vezes, o que significa que no temos que escrever o mesmo cdigo de novo.

Parmetros da Funo
Uma funo pode receber parmetros, que so valores fornecidos funo para que a mesma possa fazer algo til com os mesmos. Estes parmetros so como variveis, exceto que os valores destas variveis so definidos quando chamamos a funo e j esto atribudos quando a funo executada. Parmetros so especificados dentro do par de parnteses na definio da funo, separados por vrgulas. Quando chamamos a funo, passamos os valores da mesma maneira. Note a terminologia utilizada - os nomes dados na definio da funo so chamados de parmetros enquanto que os valores que fornecemos na chamada da funo so chamados de argumentos. 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 Sada:
$ python func_param.py 4 is maximum 7 is maximum

Como funciona: Aqui definimos uma funo chamada printMax que recebe dois parmetros chamados a e b. Encontramos o maior nmero usando um simples comando if..else e ento imprimindo o maior nmero. No primeiro uso de printMax, nos passamos diretamente os nmeros (argumentos). No segundo, chamamos a funo usando variveis. printMax(x, y) faz com que o valor do argumento x seja atribudo ao parmetro a e o valor do argumento y atribudo ao parmetro b. A funo printMax funciona da mesma maneira em ambos os casos.

Variveis Locais
Quando voc declara variveis dentro de uma definio de funo, elas no esto relacionadas de forma alguma com outras variveis com os mesmos nomes usados fora da funo, ou seja, variveis locais em relao funo. Isto o que se chama de escopo da varivel. Todas as variveis tm o escopo do bloco no qual so declaradas, a partir do ponto 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) Sada:
$ 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 Python utiliza o valor do parmetros declarado na funo. Em seguida, atribumos o valor 2 a x. O nome x local nossa funo. Ento, quando mudamos o valor de x na funo, o x definido no bloco principal permanece inalterado. No ltimo comando print, confirmamos que o valor de x no bloco principal est de fato inalterado.

Usando o comando global


Se voc quer atribuit um valor a um nome definido no nvel mais alto do programa, ou seja, fora de qualquer tipo de escopo tal como funes ou classes, ento voc tem que dizer ao Python que o nome no local, mas sim global. Fazemos isso usando o comando global. impossvel atribuir um valor a uma varivel definida fora de uma funo sem utilizar 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 dentro da funo. No entanto, isso no recomendado e deve ser evitado, uma vez que no fica claro para o leitor do programa onde est a definio da varivel. Usar o comando global torna claro que a varivel foi definida no block mais externo. 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) Sada:
$ 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 atribuir um valor a x dentro da funo, essa mudana refletida 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. Existe outro tipo de escopo chamado "nonlocal", que um meio termo entre esses dois tipos de escopo. Escopos nonlocal ocorrem quando se definem funes dentro de funes. Uma vez que tudo em Python cdigo executvel, 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() Sada:
$ python func_nonlocal.py x 2 O x local mudou para 5

Como funciona: Quando estamos dentro de func_inner, o 'x' definido na primeira linha de func_outer no est, relativamente, nem no escopo local, nem no global. Declaramos que estamos usando esse x por meio de nonlocal x e assim temos acesso quela varivel. Tente trocar o nonlocal x para global x e tambm remover o comando e observar a diferena de comportamento nesses dois casos.

Valores padro de argumentos


Para algumas funes, voc pode querer que alguns dos seus parmetros sejam opcionais e usar valores padro pr-definidos se o usurio no quiser fornecer valores para esses parmetros. Isto feito com a ajuda de valores padro de argumentos. Voc pode especificar valores padro de argumentos para parmetros colocando o operador de atribuio (=) aps o nome do parmetro na definio da funo, seguifo pelo valor padro. Note que o valor do argumento padro dever ser uma constante. Mais precisamente, o valor do argumento padro deve ser imutvel. Isso explicado em detalhes nos captulos seguintes. Por enquanto, basta lembrar disso. Exemplo: #!/usr/bin/python # Filename: func_default.py def say(message, times = 1): print(message * times) say('Ol') say('Mundo', 5) Sada:
$ python func_default.py Ol MundoMundoMundoMundoMundo

Como funciona: A funo chamada say usada para imprimir uma string quantas vezes forem necessrias. Se ns no

fornecemos um valor, ento, por padro, a string impressa apenas uma vez. Conseguimos isso especificando um valor de argumento padro 1 para o parmetro times. No primeiro uso de say, fornecemos apenas a string e ele a imprime uma vez. No segundo uso de say, fornecemos tanto a string quanto o argumento 5 5 determinando que queremos dizer a mensagem 5 vezes. Importante Apenas os parmetros que estiverem no final da lista de parmetros podem receber valores padro de argumento, ou seja, voc no pode ter um parmetro com valor de argumento padro antes de um parmetro sem um valor de argumento padro na ordem dos parmetros declarados na lista de parmetros da funo. O motivo que os valores so atribudos aos parmetros por posio. Por exemplo, def func(a, b=5) vlido, mas def func(a=5, b) no vlido.

Argumentos Nomeados
Se voc tem funes com muitos parmetros e quer especificar apenas alguns deles, ento voc pode passar valores para esse parmetros nomeando-os. Isto o que chamamos de argumentos nomeados. Usamos o nome (palavra-chave) ao invs da posio (como viemos usando at agora) para especificar os argumentos para a funo. Existem duas vantagens nessa abordagem: primeiro, mais fcil usar a funo, uma vez que no precisamos nos preocupar com a ordem dos argumentos. Segundo, podemos dar valores apenas para os parmetros que quisermos, desde que os demais tenham valores padro de argumento. 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) Sada:
$ 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 tem um parmetro sem valores padro de argumento, seguida por dois parmetros sem valores padro de argumento. No primeiro uso, func(3, 7), o parmetro a recebe o valor 3, o parametro 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 argumento. Ento, o parmetro c fica com o valor de 24 devido ao nome, ou seja, aos argumentos nomeados. A varivel b fica com o valor padro de 5. No terceiro uso func(c=50, a=100), utilizamos somente argumentos nomeados para especificar os valores. Note que estamos especificando o valor para o parmetro c antes do valor do parmetro a ainda que a tenha sido definido antes de c na definio da funo.

Parmetros VarArgs

TODO Devo escrever sobre este assunto num captulo posterior, uma vez que ainda no falamos sobre listas e dicionrios? s vezes voc pode querer definir uma funo que possa receber qualquer nmero de parmetros. Isso pode ser conseguido usando os asteriscos: #!/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)) Sada:
$ python total.py 166

Como funciona: Quando declaramos um parmetro prefixado com um asterisco, tal como *param, ento todos os argumentos posicionais daquele ponto at o final so armazenados numa lista chamada 'param'. De maneira similiar, quando declaramos um parmetro prefixado com dois asteriscos, tal como **param, ento todos os argumentos nomeados, a partir daquele ponto at o final, sero armazenados em um dicionrio chamado 'param'. Vamos explorar as listas e dicionrios em um captulo mais frente.

Parmetros apenas por palavra-chave


Se quisermos especificar que certos parmetros por palavra-chave estejam disponveis somente por palavra-chave e no como argumentos posicionais, estes pode ser declarados aps um parmetro marcado com asterisco: #!/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' Sada:

$ 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 parmetros aps um parmetro marcado com asterisco resulta em argumentos apenas por palavra-chave. Se estes argumentos no so fornecidos com um valor padro, ento chamadas funo levantaro um erro se o argumento por palavra-chave no fornecido, como visto acima. Se voc quer ter apenas parmetros por palavra-chave mas no precisa de um parmetro marcado com asterisco, ento simplesmente use um asterisco sem qualquer nome, tal como def total(initial=5, *, vegetables).

O comando return
O comando return usado para retornar da execuo de uma funo, isto , sair da funo. Podemos, opcionalmente, 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)) Sada:
$ python func_return.py 3

Como funciona: A funo maximum retornar o maior valor entre os parmetros, neste caso, os nmeros fornecidos para a funo. Ela usa um simples comando if..else para encontrar o maior valor e retorna esse valor. Note que um comando return sem um valor equivalente a return None. None um tipo especial em Python que representa um valor nulo. Por exemplo, usado para indicar que uma varivel no possui nenhum valor quando tem o valor None. Cada funo implicitamente contm um comando return None no final, a menos que voc tenha escrito seu seu prprio comando return. Voc pode confirmar isso executando a print someFunction() onde a funo someFunction no usa o comando return, tal como: def someFunction(): pass O comando pass usado em Python para indicar um bloco de comandos vazio. Nota Existe uma funo embutida chamada max que j implementa a funcionalidade 'encontrar mximo'. Portanto, use esta funo sempre que possvel.

DocStrings
Python possui um recurso chamado strings de documentao, usualmente conhecidas pelo seu nome mais curto, docstrings. DocStrings so uma ferramenta importante da qual voc deve fazer uso, uma vez que ela ajuda a documentar o programa e o torna mais fcil de entender. Python has a nifty feature called documentation strings, usually referred to by its shorter name docstrings. DocStrings are an important tool that you should make use of since it helps to document the program better and makes it more easy to understand. Surpreendentemente, podemos at obter a docstring de, digamos, uma funo, durante 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__) Sada:
$ python func_doc.py 5 o mximo Imprime o maior entre dois nmeros.

Os dois valores devem ser inteiros.

Como funciona: Uma string na primeira linha lgica de uma funo o docstring para essa funo. Note-se que docstrings tambm se aplicam a mdulos e classes, que vamos aprender sobre nos respectivos captulos. A conveno seguida para um docstring uma string de mltiplas linhas onde a primeira linha comea com uma letra maiscula e termina com um ponto. Em seguida, a segunda linha fica em branco, seguida de uma explicao detalhada a partir da terceira linha. fortemente recomendado que voc siga esta conveno para todos os seus docstrings em todas as suas funes no-triviais. Podemos acessar a docstring da funo printMax usando o atributo (nome pertencente a) __doc__ (note o duplo sublinhado) da funo. Lembre-se que Python trata tudo como um objeto e isso inclui funes. Vamos saber mais sobre os objetos no captulo sobre classes. Se voc j usou o help() em Python, ento voc j viu o uso de docstrings! O que ele faz apenas buscar o atributo __doc__ dessa funo e o exibir para voc de uma forma elegante. Voc pode experiment-lo na funo acima - basta incluir help(printMax) no seu programa. Lembre-se de pressionar a tecla q para sair do help(). Ferramentas automatizadas podem recuperar a documentao do seu programa desta maneira. Portanto, eu recomendo fortemente que voc use docstrings para qualquer funo no-trivial que voc escreva. O comando pydoc que vem com sua distribuio Python funciona de forma semelhante a help() usando docstrings.

Anotaes
Funes possuem outra funcionalidade avanada chamada anotaes, que so um modo estiloso de anexar informao adicional para cada um dos parmetros e tambm para o valor de retorno. Como o interpretador Python no interpreta estas anotaes (tal funcionalidade responsabilidade de bibliotecas de terceiros), pularemos esta funcionalidade desta discusso. Se voc est interessado em ler mais sobre anotaes, por favor veja a Proposta de Melhoria do Python No. 3107.

Sumrio
Vimos vrios aspectos das funes mas note que no cobrimos todos os seus aspectos. Entretanto, cobrimos a maioria das funes de Python que voc precisar dia aps dia. E seguida, veremos como usar e criar mdulos de Python. Retrieved from "http://www.swaroopch.com/notes/Python_pt-br:Funcoes" Category: A Byte of Python in Brazilian Copyright 2004-2011, Swaroop C H. Content is available under Creative Commons Attribution-Share Alike 3.0 Unported.

Python pt-br:Modulos
From Notes

Introduo
Voc viu como pode reutilizar cdigos em seu programa atravs da definio apenas uma vez de funes. Que tal se voc quisesse reutilizar um certo nmero de funes em outros programas que voc escrever? Como voc poderia ter adivinhado, a resposta est em mdulos. Um mdulo basicamente um arquivo contendo todas as funes e variveis que voc definiu. Para reutilizar o mdulo em outros programas, o nome do mdulo deve ter uma extenso .py. Um mdulo pode ser importado por um outro programa pra fazer uso da sua funcionalidade. Assim tambm como ns podemos usar a biblioteca padro de Python. Primeiro, ns veremos como utilizar os mdulos da biblioteca 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') Sada:
$ 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. Basicamente, isso se traduz em ns dizermos a Python que queremos empregar este mdulo. O mdulo sys contm funcionalidade relacionada ao interpretador de Python e o seu ambiente, ou seja, o systema. Quando Python executa o comando import sys, procura pelo mdulo sys.py em um dos diretrios listados na sua varivel sys.path. Se o arquivo encontrado, ento os comandos do bloco principal (main) do mdulo so executados e o mdulo tornado disponvel para seu uso. Observe que a inicializao realizada apenas a primeira vez que ns importamos o mdulo. A varivel argv no mdulo sys acessada utilizando-se a notao por pontos (dotted) isto sys.argv. Ela claramente indica que este nome parte do mdulo sys. Uma outra vantagem dessa abordagem que o nome no colide com qualquer varivel argv usada em seu programa. A varivel sys.argv uma lista de strings (listas (lists) so explicadas em detalhes em um captulo posterior). Especificamente, sys.argv contm a lista de argumentos da linha de comando, ou seja, os

argumentos que so passados para o seu programa usando a linha de comando. Se voc estiver usando uma IDE para escrever e executar esses programas, procure por uma forma de especificar os argumentos da linha de comando ao seu programa nos menus. Aqui, quando ns executamos python using_sys.py nos somos argumentos ns executamos o mdulo using_sys.py com o comando python e as outras coisas que seguem so argumentos passados ao programa. Python guarda os argumentos da linha de comando na varivel sys.argv para nosso uso. Lembre-se, o nome do script que est em execuo sempre o primeiro argumento na lista sys.argv. assim, neste caso ns teremos 'using_sys.py' como sys.argv[0], 'nos' como sys.argv[1], 'somos' como sys.argv[2] e 'argumentos' como sys.argv[3]. Note que Python comea a contagem a partir de 0 e no de 1. A varivel sys.path contm a lista de nomes de diretrios de onde os mdulos so importados. Observe que a primeira string em sys.path est vazia - esta string vazia indica que o diretrio corrente tambm parte de sys.path a qual a mesma que a varivel de ambiente PYTHONPATH. Isso significa que voc pode importar diretamente mdulos localizados no diretrio corrente. Se no for o caso, voc ter que colocar seu mdulo em um dos diretrios listados em sys.path.

Arquivos .pyc Byte-compilados


A importao de mdulos uma ao relativamente custosa, de modo que Python realiza alguns truques para torn-la mais rpida. Uma maneira a criao de arquivos byte-compilados com a extenso .pyc que uma forma intermediria em que Python transforma o programa (lembre-se da seo de introduo em Como Python Funciona?). Este arquivo .pyc til quando voc importar o mdulo a prxima vez de um programa diferente - ser muito mais rpido pois uma parte do procedimento requerido para a importao do mdulo j est feita. Alm disso, estes arquivos bytecompilados so independentes da plataforma. Nota Esses arquivos .pyc so usualmente criados no mesmo diretrio dos arquivos .py correspondentes. Se Python no tiver permisso para escrever arquivos naquele diretrio, ento os arquivos .pyc no sero criados.

O Comando from .. import


Se voc quiser importar diretamente a varivel argv no seu programa (para evitar ficar digitando sys. todas as vezes), ento voc pode usar o comando from sys import argv. Se voc quiser importar todos os nomes usados no mdulo sys, ento voc pode usar o oomando from sys import *. Isso funciona com qualquer mdulo. Em geral, voc deve evitar o uso desse comando e, ao invs, utilizar o comando import, pois dessa forma voc evitar coliso de nomes e seu programa ficar mais legvel.

O __name__ de um Mdulo
Todo mdulo tem um nome e comandos em um mdulo podem encontr-lo. Isso conveniente na situao particular em que se proecisa descobrir se o mdulo est sendo executado por si s ou est sendo importado. Como mencionado anteriormente, quando um mdulo importado pela primeira vez, o bloco principal (main) daquele mdulo executado. N podemos usar esse conceito para executar o bloco apenas se o programa for usado por si s e no quando for importado por outro mdulo. Isso pode ser alcanado usando o atributo __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') Sada:

$ 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 Python tem o seu __name__ definido e se este '__main__', isso implica que o mdulo est sendo executado por si s pelo usurio e ns poderemos adotar as aes apropriadas.

Produzindo os Seus Prprios Mdulos


A criao de seus prprios mdulos fcil, pois voc j tem feito isso o tempo todo! Isso porque todo programa em Python tambm um mdulo. Voc apenas tem que se assegurar que possua a extenso .py. O prximo exemplo deve tornar 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 amostra. Como voc pode ver, no existe nada particularmente especial a respeito dele em comparao com os nossos programas usuais em Python. Veremos agora como usar este mdulo em nossos outros programas em Python. Lembre-se que os mdulos devem ser colocados no mesmo diretrio que o programa que os importa, ou ento deve estar em um dos diretrios listados em sys.path. #!/usr/bin/python # Nome do arquivo: mymodule_demo.py import mymodule mymodule.sayhi() print 'Verso', mymodule.__version__ Sada:
$ python mymodule_demo.py Ol, este mymodule falando. Verso 0.1

Como Funciona: Note que ns empregamos a notao dos pontos para acessar os membros do mdulo. Python utiliza bastante a mesma notao que lhe d a caracterstica 'Pythonica' a ela, e modo que no temos que ficar aprendendo novas maneiras de fazer as coisas. Aqui est a verso utilizando a sintaxe 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 sada de mymodule_demo2.py a mesma que a sada de mymodule_demo.py. Note que j houvesse um nome __version__ declarado no mdulo que importa mymodule, haveria uma coliso. Isso altamente provvel pois prtica comum para cada mdulo declarar-se a sua verso usando esse nome. Da sempre recomendado optar pelo comando import, mesmo se tornar o seu programa um pouco mais longo. Zen de Python Um dos princpios-guia de Python que 'Explicito melhor do que implcito'. Execute import this para aprender mais.

A Funo dir
Voc pode usar a funo interna (built-in) dir para listar os indetificadores que um objeto define. Por exemplo, para um mdulo, os identificadores incluem as funes, classes e variveis definidas naquele mdulo. Quando voc fornece o nome do mdulo funo dir(), ela retorna a lista dos nomes definidos naquele mdulo. Quando nenhum argumento fornecido, ela retorna a lista de nomes definidos no mdulo corrente. 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 importado. Podemos ver a enorme lista de atributos que ele contm. Em seguida, ns vemos a funo dir sem nenhum parmetro passado a ela. Por padro, ela retorna a lista dos atributos do mdulo corrente. Note que a lista dos mdulos importados tambm faz parte dessa lista. A fim de observar a ao de dir, ns definimos uma nova varivel e atribumos um valor a ela e ento verificamos que existe um valor adicional na lista, com o mesmo nome da varivel. Ns removemos a varivel/atributo do mdulo corrente usando o comando del e a alterao refletida novamente na sada da funo dir. Uma nota sobre del - este comando usado para deletar a varivel/nome e depois de executado o comando, neste caso del a, voce no poder acessar a varivel a - como se ela nunca tivesse existido antes. Note que a funo dir() funciona para qualquer objeto. Por exemplo, execute dir(print) para conhecer os atributos da funo print, ou dir(str) para os atributos da classe str.

Packages
Nesse ponto, voc j deve ter comeado a observar a hierarquia da organizao de seus programas. As variveis usualmente vo dentro das funes. Funes e variveis globais usualmente vo dentro dos mdulos. Que tal se voc quisesse organizar os mdulos? Este o momento em que entram em cena as packages (pacotes). Packages so apenas pastas contendo mdulos com um arquivo __init__.py que indica a Python que esta pasta especial porque contm mdulos de Python. Vamos dizer que voc quer criar uma package denominada 'world' com as subpackages 'asia', 'africa', etc. e estas subpackages por sua vez contm mdulos como 'india', 'madagascar', etc. Esta como voc estruturaria as pastas:
- <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 hierarquicamente. Ns veremos muitos exemplos disso em biblioteca padro.

Resumo
Da mesma forma que funes so partes reutilizveis de programas, os mdulos so programas reutilizveis. Packages so uma outra hierarquia para organizar mdulos. A biblioteca padro que vem com Python representa um exemplo de tais conjuntos de packages e mdulos. Ns vimos como usar esses mdulos e criar os nossos prprios mdulos. A seguir, aprenderemos sobre interessantes conceitos denominados estruturas de dados. Retrieved from "http://www.swaroopch.com/notes/Python_pt-br:Modulos"

Category: A Byte of Python in Brazilian Copyright 2004-2011, Swaroop C H. Content is available under Creative Commons Attribution-Share Alike 3.0 Unported.

Python pt-br:Estruturas de Dados


From Notes

Introduo
Estruturas de dados so basicamente isso - so estruturas que podem conter alguns dados juntos. Em outras palavras, elas so utilizadas para guardar uma coleo de dados relacionados entre si. Existem quatro estruturas de dados internas (built-in) em Python - lista, tupla, dicionrio e conjunto (set). Ns veremos como usar cada uma delas e de que modo elas nos facilitam a vida.

Lista
Uma list (lista) uma estrutura de dados que contm uma coleo ordenada de itens, ou seja, voc pode guardar uma sequncia de itens em uma lista. Isso fcil de imaginar se voc pensar em uma lista de compras na qual voc tem uma lista de itens para comprar, exceto que voc provavelmente ter cada item em uma linha separada, ao passo que Python coloca uma vrgula entre eles. A lista de itens dever estar dentro de colchetes (square brackets), de modo que Python entende que voc est especificando uma lista. Uma vez que voc criou a lista, pode adicionar, remover ou fazer buscas por itens dela. Desde que ns podemos adicionar e remover itens, dizemos que uma lista um tipo mutvel de dados, ous seja, este tipo pode ser alterado.

Rpida Introduo a Objetos e Classes


Embora eu tenha retardado a discusso sobre objetos e classes at agora, uma pequena explanao torna-se imediatamente necessria, tal que voc possa entender melhor as listas. Exploraremos esse tpico em mais detalhes em seu prprio captulo. Uma lista um exemplo de utilizao de objetos e classes. Quando ns usamos a varivel i e atribumos um valor, digamos, inteiro 5 a ela, voc pode raciocinar como se criasse um objeto (isto uma instncia) i de uma classe (ou seja tipo) int. De fato, voc pode ler help(int) para melhor entender isso. Uma classe pode ter mtodos ou seja funes definidas para uso com respeito unicamente quela classe. Voc pode usar essas peas de funcionalidade apenas quando tem um objeto daquela classe. Por exemplo, Python fornece um mtodo append para a classe list, o que permite a voc adicionar um item ao final da lista. Por exemplo, minhalista.append('um item') adicionar aquela string ao final da lista minhalista. Note o emprego da notao dos pontos para acessar mtodos dos objetos. Uma classe pode tambm possuir campos que no so nada mais do que variveis definidas para uso com respeito unicamente quela classe. Voc pode utilizar aquelas variveis/nomes apenas quando tem um objeto daquela classe. Campos so tambm acessados com a notao dos pontos, 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) Sada:
$ 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 lista de compras para algum que est indo ao mercado. Em shoplista ns guardamos strings do nomes dos itens a serem comprados, mas voc pode adicionar qualquer espcie de objeto a uma lista, incluindo nmeros e at mesmo outras listas. Ns tambm empregamos o lao for..in para iterar sobre os itens da lista. Agora voc deve ter percebido que uma lista tambm uma sequncia. A especialidade das sequncias ser discutida em uma seo posterior. Observe o uso da palavra-chave end como argumento na funo print, para indicar que ns queremos terminar a sada com um espao, ao invs da costumeira quebra-de-linha. Em seguida, ns adicionamos um item lista usando o mtodo append do objeto lista, como j foi discutido antes. Ento, ns verificamos que o item foi efetivamente acrescentado lista atravs da impresso do contedo da lista, obtida simplesmente passando a lista ao comando print, que a imprime sem problemas. Da ns ordenamos a lista por meio do mtodo sort do objeto lista. importante compreender que este mtodo afeta a a prpria lista e que no retorna uma lista modificada - isso diferente da maneira pela qual a string funciona. o que ns queremos salientar quando dizemos que as listas so mutveis e as strings so imutveis. A seguir, quando ns terminamos de comprar um item no mercado, queremos retir-lo da lista. Alcanamos isso por meio do comando del. Aqui ns mencionamos qual o item da lista que desejamos

suprimir e o comando del o remove da lista para ns. Especificamos que queremos remover o primeiro item da lista ento usamos del shoplist[0] (lembre-se que Python comea a contagem a partir do 0.) Se voc quiser conhecer todos os mtodos definidos para o objeto lista, veja help(list) para os detalhes.

Tupla
Tuplas (tuples) so exatamente como listas, exceto que so imutveis, como as strings, isto , voc no pode modificar tuplas. Tuplas so definidas especificando itens separados por vrgulas dentro de um par de parnteses. As tuplas so costumeiramente usadas em casos em que um comando ou uma funo definida pelo usurio pode seguramente assumir que uma coleo de valores, ou seja, a tupla de valores no ser alterada. 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]) Output:
$ 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 tupla de itens. Ns vemos que a funo zoo pode ser utilizada para se obter o comprimento da tupla. Isso tambm indica que a tupla tambm uma sequncia. Ns estamos mudando aqueles animais para um novo zoo, uma vez que o antigo est para ser fechado. Dessa forma, a tupla novo_zoo contm alguns animais que j estavam l, juntamente com aqueles trazidos do velho zoo. De volta a realidade, observe que uma tupla dentro de outra tupla no perde a sua indentidade. Podemos acessar os itens em uma tupla especificando a posio do item dentro de um par de colchetes exatamente como ns fizemos para listas. Esse chamado operador de indexao. Ns acessamos o terceiro item em novo_zoo pela especificao novo_zoo[2] e acessamos o terceiro item dentro do terceiro item na tupla novo_zoo especificando novo_zoo[2][2]. muito simples uma vez que voc domine o jeito. Tuplas com 0 ou 1 item Uma tupla vazia construda com um par de parnteses como vazia = (). Entretanto, com um nico item j no to simples. Voc deve especificar usando uma vrgula em seguida ao primeiro (e nico) item, tal que Python possa diferenciar entre uma tupla e um par de parnteses que cercam uma expresso, ou seja, voc tem que especificar singleton = (2 , ), se quiser uma tupla contendo o item 2. Nota para programadores em Perl Uma lista dentro de uma lista no perde sua identidade, listas no so "achatadas", como em

Perl. O mesmo se aplica a uma tupla dentro de uma tupla, ou uma tupla em uma lista, ou uma lista em uma tupla, etc. Do ponto de vista de Python, so apenas objetos alocados usando um outro objeto, apenas isso.

Dicionrio
Um dicionrio (dictionary) como uma agenda de endereos na qual voc pode encontrar ou endereo ou detalhes de contato de uma pessoa, conhecendo apenas o nome dela, isto , associamos as keys (chaves) (nome) com values (valores) (detalhes). Note que a key deve ser nica, da mesma forma que voc no poder encontrar a informao correta se houverem duas pessoas com exatamente o mesmo nome. Observe que voc pode utilizar somente objetos imutveis (como strings) como keys de um dicionrio, mas pode usar objetos imutveis e mutveis como values do dicionrio. Isso basicamente se traduz em que voc deve usar apenas objetos simples como keys. Pares de keys e values so especificados em um dicionrio pela notao d = {key1 : value1, key2 : value2 }. Observe que os pares key/value esto separados por uma vrgula e todo o conjunto est dentro de um par de chaves. Lembre-se que os pares key/value em um dicionrio no esto de forma alguma ordenados. Se quiser um ordem particular, voc mesmo ter que orden-los antes de us-los. Os dicionrios que voc utilizar so instncias/objetos da classe dict. Exemplo: #!/usr/bin/python # Nome do arquivo: using_dict.py # 'ab' diminutivo para 'a'ddress'b'ook ab = { 'Swaroop' 'Larry' 'Matsumoto' 'Spammer' : : : : 'swaroop@swaroopch.com', 'larry@wall.org', 'matz@ruby-lang.org', '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']) Sada:

$ 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 notao j discutida. Ento acessamos os pares key/value especificando a key usando o operador de indexao como discutido no contexto de listas e tuplas. Observe a sintaxe simples. Ns podemos deletar os pares key/value usando nosso velho amigo - o comando del. Simplesmente especificamos o dicionrio o operador de indexao para a key a ser removida e passamos tudo ao comando del. No h a necessidade de conhecer o value correspondente key para esta operao. Em seguida, ns acessamos cada par key/value usando o mtodo items do dicionrio, o qual retorna uma lista de tuplas, em que cada tupla contm um par de itens - a key seguida por um value. Ns recuperamos esse par e o atribumos as variveis name e address correspondentemente para cada par, usando o lao de for..in e ento imprimimos esses valores no bloco de for. Podemos adicionar novos pares key/value, simplesmente empregando o operador de indexao para acessar a key e atribuirmos aquele value, como fizemos para Guido no caso acima. N podemos verificar se um par key/value existe, usando o operador in ou mesmo o mtodo has_key da classe dict. Voc pode ver a documentao para a lista completa de mtodos da classe dict, usando help(dict). Argumentos em Keyword (palavras-chave) e Dicionrios Em um tpico distinto, se voc tiver empregado argumentos em keywords em suas funes, voc j usou dicionrios! Pense um pouco sobre isso - o par key/value especificado por voc na lista de parmetros da definio da funo e quando voc acessa variveis dentro de sua funo, trata-se apenas de uma acesso a key de um dicionrio (que chamado de tabela de smbolos em terminologia de compiladores).

Sequncias
Listas, tuplas, strings e arquivos so exemplos de sequncias, mas o que as sequncias tem de to especial? Duas das principais caractersticas de uma sequncia so a operao de indexao'que nos permite recuperarmos diretamente um item particular e a operao de slicing (fatiamento) que nos permite recuperarmos uma fatia de uma sequncia, ou seja, uma parte 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[:]) Sada:
$ 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: Primeiramente, ns vemos como utiizar os ndices para obter itens individuais de uma sequncia. Isso tambm conhecido como operao de subscrio. Quando voc especifica um nmero dentro de colchetes a uma sequncia, como mostrado acima, Python ir recuperar para voc o item correspondente aquela posio na sequncia. Lembre-se que Python comea a contagem dos nmeros a partir do 0. Da, shoplist[0] retorna o primeiro item e shoplist[3] retorna o quarto item na sequncia shoplist. O ndice pode tambm ser um nmero negativo, em cujo caso, a posio calculada a partir do fim da sequncia. Assim, shoplist[-1] refere-se ao ltimo item da sequncia e shoplist[-2] recuoera o penltimo item da sequncia. A operao de slicing empregada especificando-se o nome da sequncia seguido de um par opcional de nmeros separados por 'dois pontos' dentro de colchetes. Note que isso bem similar a operao de indexao que voc vem usando at agora. Lembre-se que os nmeros so opcionais mas o 'dois

pontos' no . O primeiro nmero (antes do 'dois pontos') na operao de slicing refere-se a posio de onde a fatia comea e o segundo nmero (depois do 'dois pontos') indica onde a fatia terminar. Se o primeiro nmero no for especificado, Python comear no incio da sequncia. Se o segundo nmero no existir, Python terminar no final da sequncia. Note que a fatia retornada comea na posio de incio e termina imediatamente antes da posio do fim, ou seja, a posio de incio includa, mas a posio do fim excluda na fatia da sequncia. Ento, shoplist[1:3] retorna uma fatia de uma sequncia que comea na posio 1, inclui a posio 2 mas para na posio 3 e assim uma fatia de dois itens retornada. Similarmente, shoplist[:] retorna uma cpia da sequncia toda. Voc pode tambm efetuar slicing com nmeros negativos. Os nmeros negativos so usados para posies a partir do fim da sequncia. Por exemplo, shoplist[:-1] retornar uma fatia da sequncia que exclui o ltimo item da sequncia mas contm todo o resto dela. Experimente vrias combinaes de especificaes de slicing usando interativamente o interpretador de Python, ou seja, o prompt, de modo que voc possa ver os resultados imediatamente. Uma grande coisa a respeito de sequncias e que voc pode acessar tuplas, listas e strings todas da mesma maneira!

Conjuntos
Conjuntos (Sets) so colees no ordenadas de objetos simples. Eles so usados quando a existncia de um objeto em uma coleo mais importante do que a ordem em que est ou o nmero de vezes em que ocorre. Usando sets, voc pode testar para pertencimento a um conjunto, verificar se um conjunto um subconjunto de outro, encontrar a interseo entre dois conjuntos, e assim por diante. >>> 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 razoavelmente auto-explicativo, pois envolve teoria bsica de conjuntos ensinada na escola.

Referncias
Quando voc cria um objeto e o atribui a uma varivel, esta apenas se refere ao objeto e no representa o objeto em si mesmo! Isto , o nome da varivel aponta para aquela parte da memria do seu computador na qual o objeto est armazenado. Isso chamado vinculao (binding) do nome ao objeto. Em geral voc no precisa ficar preocupado com isso, mas existe um efeito sutil devido a referncias ao qual voc precosa ficar atento: 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 print('shoplist is', shoplist) print('mylist is', mylist) # note como tanto shoplist e mylist ambas imprimem a mesma lista, sem 'apple', confirmando que 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 Sada:
$ 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 parte da explicao est disponvel nos prprios comentrios. O que voc precisa lembrar que quiser fazer uma cpia de uma lista ou tais espcies de sequncias ou objetos complexos (no objetos simples como inteiros), ento voc deve utilizar a operao de slicing para efetuar uma cpia. Se voc apenas atribuir o nome da varivel a outro nome, ento ambos se referiro ao mesmo objeto e isso pode ser um problema se voc no for cuidadoso. Nota para programadores em Perl Lembre-se que um comando de atribuio para listas no cria uma cpia. Voc dever usar a operao de slicing para efetuar uma cpia da sequncia.

Mais Sobre Strings


Ns j discutimos strings em detalhes antes. O que mais h para se conhecer? Bem, voc sabia que strings so tambm objetos e que tem mtodos que fazem de tudo, desde verificar partes de uma string at retirar os espaos em branco! As strings que voc usa em seu programa so todas objetos da classe str. Alguns mtodos teis dessa classe so demonstrados no prximo exemplo. Para uma lista completa de tais mtodos, 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)) Output:
$ 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 mtodos da string em ao. O mtodo startswith usado para descobrir se a string comea com uma dada string. O operador in usado para verificar se uma dada string uma parte de uma string. O mtodo find usado para achar a posio de uma dada string em uma string ou retorna -1 se no for bem sucedido em achar a substring. A classe str tem tambm um elegante mtodo para join os itens de uma sequncia, com a string atuando como delimitador entre cada item da sequncia e retorna uma string muito maior produzida com isso.

Resumo
Ns esxploramos detalhadamente as vrias estruturas internas (built-in) de Python. Estas estruturas sero essenciais para escrever programas de um tamanho razovel. Agora que ns j temos sob controle o bsico de Python, veremos a seguir como projetar e escrever programas do mundo real em Python. Retrieved from "http://www.swaroopch.com/notes/Python_pt-br:Estruturas_de_Dados" Category: A Byte of Python in Brazilian Copyright 2004-2011, Swaroop C H. Content is available under Creative Commons Attribution-Share Alike 3.0 Unported.

Python pt-br:Resolucao de Problemas


From Notes
Ns exploramos vrias partes da linguagem Python e agora daremos uma olhada em como essas partes se ajustam entre si, projetando e escrevendo um programa que faz algo til. A idia aprender a escrever o seu prprio script em Python.

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 existe informao suficiente para que possamos dar incio a uma soluo. Um pouco mais de anlise necessria. Por exemplo, como poderamos especificar quais os arquivos cujo backup deveria ser feito? Como eles esto alocados? Onde eles esto alocados? Depois de analisarmos apropriadamente o problema, ns projetamos o nosso programa. Ns elaboramos uma lista de coisas a respeito de como o nosso programa deveria operar. Neste caso em particular, criei a lista que se segue, com base em como eu quero que ele funcione. Se voc desenvolver o projeto, poder surgir com outro tipo de anlise, uma vez que cada pessoa tem o seu prprio modo de fazer as coisas, o que perfeitamente legtimo. 1. Os arquivos e diretrios objeto do backup esto especificados em uma lista. 2. O backup deve ser colocado em um diretrio principal de backup. 3. O backup deve ser colocado em uma arquivo do tipo zip. 4. O nome do arquivo zip a data e a hora correntes. 5. Usaremos o comando zip disponvel por default em qualquer distribuio Linux/Unix padro. Os usurios de Windows podem instalar da pgina do projeto e adicionar C:\Arquivos de Programas\GnuWin32\bin a varivel de ambiente do sistema PATH, de modo anlogo ao que fizemos para que o comando python fosse reconhecido. Note que voc pode utilizar qualquer comando de arquivamento que desejar, desde que possua uma interface atravs de linha de comando, de forma que possamos passar argumentos a ele por meio de nosso script.

A Soluo
Uma vez que o projeto de nosso programa encontra-se agora razoavelmente estvel, podemos escrever o cdigo que representa uma implementao 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 den # 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') Sada:
$ python backup_ver1.py Backup bem-sucedido em E:\Backup\20080702185040.zip

Agora, ns nos encontramos em uma fase de testes, quando ns verificamos que o nosso programa funciona de forma apropriada. Se ele no se comportar como esperado, ento ns temos 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) imediatamente antes da chamada para os.system e execute o programa. Agora copie/cole o comando_zip impresso no 'prompt' do shell e veja se ele executa adequadamente por si mesmo. Se o comando falhar, verifique no manual do comando zip o que poderia estar errado. Se o comando for bem sucedido, ento verifique se o programa em Python corresponde exatamente ao prograna escrito acima. Como funciona: Voc notar como ns convertemos o nosso projeto em um procedimento passo-a-passo. Ns fazemos uso dos mdulos os e time, antes de tudo importando-os. Ento, ns especificamos os arquivos e diretrios cujo backup deve ser realizado na lista tt>origem</tt>. O diretrio alvo onde ns armazenamos todos os arquivos do backup e este est especificado pela varivel dir_alvo. O nome do arquivo zip que iremos criar a data e hora correntes, os quais ns obtemos utilizando a funo time.strftime(). Ele receber tambm a extenso zip e ser posto no diretrio dir_alvo. Observe o uso da varivel os.sep - esta fornece o separador de diretrios de acordo com o sistema operacional, ou seja, ser '/' em Linux, Unix, ser '\\' em Windows e ':' em Mac OS. O uso de os.sep, ao invs desses caracteres diretamente, tornar o nosso programa portvel e capaz de operar sob aqueles sistemas. A funo time.strftime() recebe uma especificao tal como a que usamos no programa acima. A especificao %Y ser substituda pelo ano sem o sculo. A especificao %m ser substituda pelo mes como um nmero decimal entre 01 e 12 e assim por diante. A lista completa de tais especificaes pode ser encontrada no Python Reference Manual(Manual de Referncia de Python). Ns criamos o nome do arquivo alvo zip utilizando o operador adio, o qual concatena as strings, isto , combina conjuntamente as strings e retorna uma nova string. Ento, ns criamos uma string comando_zip que contm o comando que iremos executar. Voc pode verificar se esse comando funciona, executando-o no shell (terminal de Linux ou no 'prompt' do DOS).

Ao comando zip que ns estamos usando, so passadas algumas opes e parmetros. 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 trabalhar recursivamente sobre os diretrios, ou seja, dever incluir todos os subdiretrios 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 lista de arquivos e diretrios a realizar o backup. Ns convertemos a lista origem em uma string, usando o mtodo join de strings, o qual j vimos como empregar. Ento, ns finalmente executamos o comando usando a funo os.system, que executa o comando como se o estivesse fazendo pelo sistema operacional, isto , no shell - ele retorna 0 se o comando foi bem sucedido, retornando um nmero de erro, em caso contrrio. Dependendo do resultado do comando, ns imprimimos a mensagem apropriada se o backup falhou ou se foi bem sucedido. Ento isso, ns criamos um script para realizar um backup de nossos arquivos importantes! Nota aos Usurios de Windows Ao invs de sequncias de escape com duplo 'backslash' voc pode tambm eepregar raw strings. Por exemplo, use 'C:\\Documentos' ou r'C:\Documentos'. Entretanto, no utilize 'C:\Documentos', uma vez que voc vai acabar encontrando uma sequncia desconhecida de escape \D. Agora que ns temos um script de backup operacional, podemos us-lo em qualquer situao em que desejamos obter um backup de arquivos. Os usurios de Linux/Unix so aconselhados a empregar o metodo_executavel como discutido anteriormente de modo que possam executar o script de backup a qualquer momento e em qualquer lugar. Esta chamada a fase de operao ou de emprego do software. O programa acima funciona apropriadamente, mas (usualmente) os primeiros programas no operam exatamente como voc espera. Por exemplo, poderiam haver problemas se voc no tivesse projetado o programa adequadamente ou se voc tivesse cometido um erro ao digitar o cdigo, etc. Apropriadamente, voc ter que voltar fase de projeto ou ter que 'debugar' o seu programa.

Segunda Verso
A primeira verso do nosso script funciona. Entretanto, ns podemos implementar certos refinamentos a ele, de modo a que possa funcionar ainda melhor dia aps dia. Esta chamada a fase de manuteno do software. Um dos refinamentos que eu achei que seria til um mecanismo mais adequado de atribuio do nome para os arquivos - usar a hora como o nome do arquivo dentro de um diretrio com a data corrente como um diretrio no diretrio principal de backup. A primeira vantagem que os seus backups estaro armazenados de uma forma hierrquica e assim muito mais fcil de gerenciar. A segunda vantagem que o comprimento dos nomes dos arquivos ser muito menor. A terceira vantagem que diretrios separados o ajudaro a facilmente verificar se voc j realizou o backup do dia, uma vez que o diretrio s ser criado se voc tiver efetuado 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 den # 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') Sada:
$ 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 parte do programa permanece a mesma. As alteraes so aquelas nas quais verificamos se existe um diretrio com o dia corrente como nome dentro do diretrio principal utilizando a funo os.exists. Se no existir, ns o criamos por meio da funo os.mkdir.

Terceira Verso
A segunda verso funciona muito bem quando eu efetuo muitos backups, mas quando h um nmero muito grande de backups, eu estou achando difcil diferenciar para que razo so os backups! Por exemplo, eu poderia ter feito algumas alteraes significativas a um programa ou apresentao, ento eu gostaria a razo para aquelas alteraes ao nome do arquivo zip. Isso pode ser facilmente obtido associando-se um comentrio fornecido pelo usurio ao nome do arquivo zip. Nota O programa a seguir no funciona, ento no precisa ficar alarmado, por favor acompanhe a discusso, pois nela existe 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 den # 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') Sada:
$ 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! Python est dizendo que existe um erro de sintaxe o que significa que o script no satisfaz a estrutura que Python espera encontrar. Quando ns observamos o erro dado por Python, ele tambm nos aponta o local onde detetou o erro. Ento ns comeamos a debugar o nosso programa a partir daquela linha. Mediante uma observao mais cuidadosa, ns verificamos que a nica linha lgica foi dividida em duas linhas fsicas, mas ns no especificamos que essas duas linhas fsicas esto conectadas uma a outra. Basicamente, Python encontrou 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 continua na prxima linha fsica atravs do uso de um 'backslash' no final da linha fsica. Assim, ns efetuamos essa correo no nosso programa. A correo do programa quando ns encontramos erros denominada conserto 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 den # 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') Sada:
$ 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: Este programa agora funciona! Vamos discutir os melhoramentos reais que fizemos na verso 3. Ns coletamos o comentrio do usurio usando a funo input e ento verificamos se o usurio efetivamente entrou com alguma coisa, por meio da determinao do comprimento da entrada usando a funo len. Se o usurio apenas pressionou enter sem realmente haver entrado com algo (talvez tenha sido apenas um backup de rotina ou no haviam mudanas significativas), ento ns procedemos como havamos feito antes. Entretanto, se um comentrio foi fornecido, ento ele associado ao nome do arquivo imediatamente

antes da extenso .zip. Observe que ns estamos substituindo espaos nos comentrios por 'underscores' (sublinhados) - isto porque gerenciar arquivos sem espaos muito mais fcil.

Mais Refinamentos
A quarta verso um script que funciona satisfatoriamente para a maior parte dos usurios, mas existe espao para melhorias. Por exemplo, voc poderia incluir um nvel de verbosidade para o programa, no qual voc poderia especificar uma opo -v para tornar o seu programa mais informativo. Uma outra possvel melhoria seria permitir arquivos e diretrios adicionais a serem passados ao script na linha de comando. Ns podemos obter esses nomes da lista sys.argv e adicion-los a nossa lista sorigem utilizando o mtodo extend da classe list. O refinamento mais importante seria a no utilizao da via atravs de os.system para a criao dos arquivos e ao invs disso lanar mo dos mdulos 'built-in' zipfile ou tarfile para cri-los. Estes so parte da biblioteca padro e prontamente disponveis para seu uso sem as dependncias externas do programa zip que deve estar disponvel no seu computador. Entretanto, eu usei o caminho de os.system para criar um backup nos exemplos acima por razes puramente pedaggicas, de modo que o exemplo fosse suficientemente simples para ser entendido por qualquer pessoa mas real o suficiente para ser til. Voc poderia tentar escrever a quinta verso que utiliza 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 software. Essas fases podem ser resumidas como segue: 1. 2. 3. 4. 5. 6. Descubra o Qu (Anlise) Saiba Como (Projeto) Faa (Implementao) Teste (Testando and 'Debugando') Use (Operao or Emprego) Mantenha (Refinamento)

Uma forma recomendada de escrever programas o procedimento que ns seguimos ao criar o script de backup: Realize a anlise e o projeto. Comece por implementar uma verso mais simples. Teste-a e conserte os seus 'bugs'. Use a verso para certificar-se que opera como esperada. Agora, acrescente algumas funcionalidades que voc queira e continue a repetir o ciclo Faa-Teste-Use tantas vezes quanto necessrio. Lembre-se, Software desenvolvido, no vem pronto.

Resumo
Ns vimos como criar os nossos prprios programas/scripts em Python e os vrios estgios envolvidos ao escrever esses programas. Voc poder achar til criar o seu poprio programa da mesma maneira que ns fizemos nesse captulo, de modo que voc se fique vontade no apemnas com Python, mas tambm com a resoluo de problemas. A seguir, discutiremos a programao orientada a objetos.

Retrieved from "http://www.swaroopch.com/notes/Python_pt-br:Resolucao_de_Problemas" Category: A Byte of Python in Brazilian Copyright 2004-2011, Swaroop C H. Content is available under Creative Commons Attribution-Share Alike 3.0 Unported.

Python pt-br:Programacao Orientada a Objetos


From Notes

Introduo
Em todos os programas que escrevemos at agora, projetamos nosso programa em termos de funes, isto , blocos de declaraes que manipulam dados. Esta a chamada maneira de programar orientada a procedimentos. Existe outra maneira de organizar seu programa que combina dados e funcionalidades e as empacota dentro de algo chamado objeto. Este o chamado paradigma de programao orientada a objetos. Na maioria das vezes voc pode usar a programao orientada a procedimentos, mas quando estamos escrevendo grandes programas ou temos um problema que se adequa melhor a esse mtodo, voc pode usar tcnicas de programao orientadas a objetos. Classes e objetos so os dois principais aspectos da programao orientada a objetos. Uma classe cria um novo tipo onde objetos so instncias da classe. Uma analogia que voc pode ter variveis do tipo int o que significa dizer que variveis que armazenam inteiros so variveis que so instncias (objetos) da classe int. Nota para Programadores de Linguagens Estticas Note que mesmo os inteiros so tratados como objetos (da classe int). Isso diferente do C++ e do Java (antes da verso 1.5) onde os inteiros so tipos primitivos nativos. Veja help(int) para mais detalhes sobre a classe. Programadores C# e Java 1.5 encontraro semelhanas com os conceitos de boxing e unboxing. Objetos podem armazenar dados utilizando variveis comuns que pertencem ao objeto. Variveis que pertencem a um objeto o classe so chamadas de campos. Objetos tambm podem ter funcionalidade por meio de funes que pertencem a uma classe. Tais funes so chamadas de mtodos da classe. Esta terminologia importante porque nos ajuda a diferencias entre funes e variveis que so independentes e as que pertencem a uma classe ou objeto. Coletivamente, os campos ou mtodos podem ser considerados atributos da classe. Os campos podem ser de dois tipos - eles podem pertencer a cada instncia/objeto ou podem pertencer classe em si. Elas so chamadas de variveis de instncia e variveis de classe, respectivamente. Uma classe criada usando a palavra-chave class. Os campos e mtodos da classe so listados em um bloco indentado.

O self
Os mtodos tem apenas uma diferena especfica em relao a funes comuns: eles devem ter um primeiro nome extra que deve ser includo no incio da lista de parmetros, mas voc no deve atribuir um valor a esse parmetro quando chama o mtodo, pois o Python o fornece implicitamente. Essa varivel em particular refere-se ao prprio objeto e, por conveno, chamada de self. Embora seja possvel dar qualquer nome a este parmetro, fortemente recomendado que voc use o nome self. Existem muitas vantagens um usar um nome padro - qualquer leitor do seu programa ir reconhec-lo imediatamente e mesmo IDEs especializadas podem ajud-lo se voc usar self. Nota para Programadores C++/Java/C# O self em Python equivalente ao ponteiro this em C++ e referncia this em Java e C#. Voc deve estar intrigado sobre como Python atribui o valor para self e o porqu voc no precisa atribuir um valor para ele. Um exemplo tornar mais claro. Digamos que voc tenha uma classe chamada MyClass e uma instncia desta classe chamada MyObject. Quando voc invoca um mtodo deste objeto como MyObject.method(arg1, arg2), isto convertido automaticamente pelo Python em MyClass.method(MyObject, arg1, arg2) - este o sentido especial de self. Isto tambm significa que, se voc tem um mtodo que no possui argumentos, ento voc ainda assim dever ter um argumento - o self.

Classes

A classe mais simples possvel mostrada no seguinte exemplo. #!/usr/bin/python # Arquivo: simplestclass.py class Person: pass # Um bloco vazio p = Person() print(p) Sada:
$ python simplestclass.py <__main__.Person object at 0x019F85F0>

Como Funciona: Criamos uma nova classe usando a instruo class e o nome da classe. Na sequncia, temos um bloco de instrues que formam o corpo da classe. Neste caso, temos um bloco vazio que indicado pela instruo pass. Em seguida, criamos um objeto/instncia desta classe usando o nome da classe seguido por um par de parnteses. (Aprenderemos mais sobre instanciao na prxima seo). Para verificao, confirmamos o tipo da varivel simplementes imprimindo-a (print). Isso nos diz que temos uma instncia da classe Person no mdulo __main__. Observe que o endereo de memria onde seu objeto est armazenado tambm impresso. O endereo ter um valor diferente em seu computador, uma vez que o Python poder armezenar o objeto onde quer que haja espao.

Mtodos de Objetos
J discutimos que classes/objetos podem ter mtodos exatamente como funes, exceto pelo fato de que temos uma varivel extra - 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() Sada:
$ python method.py Hello, how are you?

Como Funciona: Aqui vemos o self em ao. Observe que o mtodo sayHi no possui qualquer parmetro mas, ainda assim, temos o self na definio do mtodo.

O mtodo __init__
Existem vrios nomes de mtodos que possuem significado especial em classes Python. Veremos agora o significado do mtodo __init__. O mtodo __init__ invocado pronta e automaticamente quando um objeto de uma classe

instanciado. Este mtodo til para realizar quaisquer iniciaes que voc desejar fazer com o seu objeto. Observe os sublinhados duplos, no incio 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() Sada:
$ python class_init.py Hello, my name is Swaroop

Como Funciona: Aqui, definimos o mtodo __init__ com um parmetro name (alm do usual parmetro self). Ento, simplesmente criamos um novo atributo tambm chamado name. Observe que tratam-se de variveis diferentes, embora tenham o mesmo nome ('name'). A notao por ponto nos permite diferenciar uma varivel da outra. Mais importante ainda, observe que ns no invocamos o mtodo __init__ explicitamente, mas apenas passamos os argumentos entre os parnteses aps o nome da classe, quando criamos uma nova instncia. Este o significado especial deste mtodo. Agora, podemos usar o atributo self.name em nossos mtodos, como demonstrado no mtodo sayHi. Nota para Programadores C++/Java/C# O mtodo __init__ anlogo a um construtor em C++, Java ou C#.

Variveis de Classe e Objeto


J discutimos a respeito do lado funcional de classes e objetos (i.e. mtodos), agora vamos aprender sobre dados. Dados (i.e. campos ou atributos) so nada mais que variveis comuns que esto associadas ao espao de nomes (namespace) de uma classe e/ou objeto. Isto significa que esses nomes so vlidos apenas no contexto de uma classe e/ou objeto particular. Por isso so chamados de espaos de nomes (name spaces). Existem dois tipos de atributos (ou campos) - variveis de classe e variveis de objeto, que so classificados dependendo de quem - a classe ou o objeto - possui essas variveis. Variveis de classe so compartilhadas - elas podem ser acessadas por todas as instncias daquela classe. H apenas uma cpia de uma varivel de classe e quando qualquer instncia daquela classe modifica o seu valor, essa mudana ser vista por todas as outras instncias. Variveis de objeto so particulares a cada instncia individual de uma classe. Neste caso, cada objeto possui a sua prpria cpia, ou seja, elas no so compartilhadas e no esto relacionadas de qualquer maneira outras variveis com o mesmo em outras instncias. Um exemplo tornar mais fcil de entender:

#!/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() Sada:

(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: Este um longo exemplo, mas ajuda a demonstrar a natureza das variveis de classe e de instncia. Aqui, population pertence classe Robot e, portanto, uma varivel de classe. A varivel name pertence ao objeto (instncia, pois atribuda usando self) e, portanto, uma varivel de instncia. Assim, nos refermos varivel de classe population como Robot.population e no como self.population. Por outro lado, nos refermos varivel de instncia name usando a notao self.name, nos mtodos daquele objeto. Lembre-se desta simples diferena entre variveis de classe e de instncia. Note tambm que, uma varivel de instncia com o mesmo nome de uma varivel de classe ir se sobrepor varivel de classe, escondendo-a! O mtodo howMany , na verdade, um mtodo de classe, e no um mtodo de instncia. Portanto, o primeiro argumento klass. Note que escrevemos klass com 'k', por que no podemos reutilizar a palavra class que a palavra-chave usada para criar nova classes. Ainda no terminamos de definir 'howMany', pois temos que tornar explcito que trata-se de um mtodo de classe. Para isso, empacotamos o mtodo usando a funo interna classmethod. Podemos obter o mesmo efeito usando decorators: @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 atalhos para uma chamada explcita a uma instruo, como vimos neste exemplo. Note que o mtodo __init__ usado para iniciar a instncia de Robot com um nome. Na iniciao, incrementamos em 1 a populao (population) de robs, uma vez que temos mais um rob adicionado. Observe tambm que os valores de self.name so especficos a cada objeto demonstrado a natureza das variveis de instncia. Lembre-se que voc deve referir-se s variveis e mtodos de uma mesma instncia somente em conjunto com self. Isto chamado de referncia ao atributo. Neste exemplo, tambm vemos o uso de docstrings para classes e tambm para mtodos. Podemos acessar a documentao da classe em tempo de execuo usando Robot.__doc__ e a documentao de um mtodo usando Robot.sayHi.__doc__. Assim como o mtodo __init__, h um outro mtodo especial __del__ que invocado com quando um objeto est para ser eliminado, isto , quando no ser mais utilizado e ser eliminado para que o sistema reutilize o trecho de memria que aquela instncia estiver ocupando. Neste mtodo, simplesmente decrementamos a populao geral de robs em 1 usando Person.population -= 1. O mtodo __del__ ser executado quando o objeto no estiver mais em uso e no h garantias de

quando o mtodo ser invocado. Se voc deseja v-lo em ao, devemos utilizar a instruo del explicitamente, que exatamente o que fizemos. Nota para Programadores C++/Java/C# Todos os membros de classe (incluindo dados - variveis) so pblicos e todos os mtodos so virtual em Python. H uma exceo: Se voc definir nomes para os membros prefixados com dois caracteres de sublinha como em __privatevar, Python altera esse nome internamente (tcnica chamada name-mangling) para tornar a varivel, efetivamente, privada. Assim, segue-se a conveno de que, qualquer varivel que deva ser utilizada apenas pela classe ou pela instncia deve iniciar com um sublinhado e, todos os outros nomes so pblicos e podem ser utilizados por outras classes/objetos. Lembre-se de que esta apenas uma conveno e no exigido pelo Python (exceto para prefixos que iniciem com dois caracteres de sublinhado). Note tambm que o mtodo __del__ anlogo ao conceito de mtodos destructor.

Herana
Um dos maiores benefcios da programao orientada a objetos reusabilidade de cdigo, e uma maneiras de obter isto atravs do mecanismo de herana. Herana pode ser imaginada como a implementao de um relacionamento tipo e subtipo entre classes. Suponha que voc deva escrever um programa para controle de professores e alunos em uma escola. Eles possuem caractersticas comuns tais como nome, idade e endereo. Eles tambm possuem caractersticas especficas tais como salrio, matrias e leaves para professores e notas e mensalidades para alunos. Voc pode criar duas classes independentes, uma para tipo, mas adicionar uma nova caraterstica comum significar adicionar nas duas classes independentes. Isto torna-se rapidamente desajeitado. Um modo mais eficiente criar uma classe comum chamada SchoolMember e ento fazer outras duas classes professor (Teacher) e aluno (Student) herdarem suas caracterstias, isto , elas sero seus sub-tipos, e ento poderemos adicionar caractersticas especficas para cada sub-tipo. Existem muitas vantagens nesta abordagem. Se adicionarmos ou mudarmos qualquer funcionalidade em SchoolMember, isto ser automaticamente refletido em seus sub-tipos. Por exemplo, voc poder adicionar um novo campo ID para professores e alunos simpesmente adicionando esse campo na classe SchoolMember. Entretanto, mudanas em sub-tipos no afetaro outros sub-tipos. Outra vantagem que voc pode se referir aos objetos professores e alunos como objetos SchoolMember, o que pode ser til em algumas situaes, tal como contar o nmero total de membros. Isto chamado de polimorfismo, onde um sub-tipo pode ser substitudo em qualquer situao onde um super-tipo esperado, isto , o objeto pode ser manipulado como se fosse uma instncia da classe pai. Observe tambm que ns reutilizamos o cdigo da classe pai (super-tipo) e por isso no precisamos repet-lo nos sub-tipos, como teramos que fazer no caso de usarmos classes independentes. A classe SchoolMember nesta situao 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 implementar o exemplo citado:

#!/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 Sada:
$ 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 tupla, logo aps o nome da classe em sua declarao. Em seguida, observamos que o mtodo __init__ da classe base explicitamente invocado usando a varivel self, de tal maneira que podemos iniciar a poro da classe base do objeto. muito importante lembrar-se disto - Python no invocar automaticamente o construtor da classe base, por isso voc dever invoc-lo explicitamente.

Observamos tambm que podemos invocar mtodos da classe base prefixando o nome da classe na chamada do mtodo e ento passar como argumento a varivel self alm de quaisquer outros argumentos. Note que podemos tratar instncias de Teacher ou Student simplesmente como instncias de SchoolMember, tal como quando usamos o mtodo tell da classe SchoolMember. Ainda, note que invocado o mtodo tell do sub-tipo e no o mtodo tell da classe SchoolMember. Uma maneira de enteder isto que Python sempre procura pelo mtodo invocado, primeiro no tipo real do objeto, o que verificado neste caso. Se o mtodo invocado no puder ser encontrado, Python ir procurar pelo mtodo nas classes base (especificadas na tupla onde a classe declarada) uma-a-uma na ordem em que foram escritas. Uma nota sobre terminologia - se mais de uma classe fornecida na tupla de herana (na declarao da classe), isto chamado de herana mltipla.

Metaclasses
H muito mais no vasto tpico da programao orientada a objetos, mas tocaremos levemente em apenas alguns poucos tpicos apenas para ficarmos sabendo que existem. Assim como usamos classes para criar objetos, podemos utilizar metaclasses para criar classes. Metaclasses so usadas para modificar ou criar novos comportamentos em classes. Vamos tomar um exemplo. Suponha que desejemos ter certeza que sempre criaremos instncias de subclasses da classe SchoolMember e que no criaremos instncias da classe SchoolMember em si. Podemos garantir isso usando um conceito 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 conceito, e no deve ser utilizada como uma classe real (ou seja, no devem ser criados objetos - instncias - dessa classe). Podemos declarar que a nossa classe uma classe base abstrata usando a metaclasse interna 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 Sada:
(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 mtodo tell da classe SchoolMember como sendo um mtodo abstrato, assim, automaticamente, no poderemos criar instncias da classe SchoolMember. Entretanto, podermos criar instncias de Teacher e Student como se fossem instncias de SchoolMember, por que eles so subclasses.

Sumrio
Acabamos de explorar os vrios aspectos de classes e objetos bem como vrias terminologias relacionadas. Vimos tambm os benefcios e as armadilhas da programao orientada a objetos. Python fortemente orientado a objetos e compreender cuidadosamente estes conceitos o ajudaro muito a longo prazo. A seguir, aprenderemos a lidar com entrada e sada (input/output) e sobre como acessar arquivos em Python.

Retrieved from "http://www.swaroopch.com/notes/Python_pt-br:Programacao_Orientada_a_Objetos" Category: A Byte of Python in Brazilian Copyright 2004-2011, Swaroop C H. Content is available under Creative Commons Attribution-Share Alike 3.0 Unported.

Python pt-br:Entrada e Saida


From Notes

Introduo
Haver situaes em que seu programa dever interagir com o usurio. Por exemplo, voc poderia desejar obter alguma entrada do usurio e ento imprimir algo. Ns podemos fazer isso usando as funes input() e print(). Para a sada, ns tambm podemos usar vrios mtodos da classe str (string). Por exemplo, voc pode usar o mtodo rjust para tornar uma string justificada a direita em uma largura especificada. Veja help(str). Outro tipo comum de entrada/sada o uso de arquivos. A habilidade de criar, ler e escrever arquivos essencial para muitos programas e ns exploraremos este aspecto neste captulo.

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") Sada:
$ 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 inverter o texto. 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 tambm podemos fornecer um terceiro argumento que determina os passos pelos quais o 'slicing' feito. O passo padro 1, pois assim ele retorna uma parte contnua do texto. Dando um passo negativo, i.e. -1 o texto ser retornado de forma invertida. A funo input() recebe uma string como argumento e a mostra para o usurio. Ento ela espera que o usurio digite algo e pressione a tecla de retorno (Enter). Feito isso, a funo input() ir retornar o texto.

Ns pegamos este texto e o invertemos. Se o texto original e o invertido forem iguais, ento o texto um palndromo. Lio de casa: Verificar se um texto um palndromo deveria ignorar pontuao, espaos e caixas altas e baixas. Por exemplo, "Socorram-me, subi no nibus em Marrocos!" tambm um palndromo, mas nosso atual programa no diz isso. Voc pode modificar o programa para reconhecer este palndromo?

Arquivos
Voc pode abrir e usar arquivos para leitura ou gravao criando um objeto da classe file e usando seus mtodos 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 abertura. Quando voc acabar de usar o arquivo, voc pode chamar o mtodo close() para dizer para o Python que ns terminamos 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 pa 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 Sada:
$ python usando_arquivo.py Programar divertido Quando o trabalho est pronto se voc quer tornar seu trabalho divertido: use Python!

Como funciona: Inicialmente, abrimos um arquivo usando a funo embutida open e especificando o nome do arquivo e o modo no qual queremos abri-lo. Os modos podem ser de leitura ('r'), gravao ('w') ou adicionar ('a'). Ns tambm podemos trabalhar com um arquivo de texto ('t') ou um arquivo binrio ('b'). Na verdade existem muito mais mdulos disponveis, digitar help(open) dar a voc mais detalhes sobre eles. Por padro, open() consideradas o arquivo como um 't'exto e o abre no modo leitura ('r'ead). Em nosso exemplo, ns primeiro abrimos o arquivo em modo texto para gravao, ento usamos o mtodo write do objeto arquivo para escrever o texto e, finalmente, fechamos o arquivo com o mtodo close. Em seguida, ns abrimos o mesmo arquivo novamente para leitura. Ns no especificamos o modo pois o modo padro 'arquivo texto para leitura'. Ns lemos cada linha usando o mtodo readline em um loop. Este mtodo retorna uma linha completa, incluindo o carcter de nova linha no final. Quando

uma string vazia retornada, significa que ns atingimos o fim do arquivo e, ento, 'interrompemos' (break) o loop. Por padro, a funo print() imprime o texto com uma nova linha na tela. Ns evitamos a nova linha especificando end='' pois a linha que lida do arquivo j termina com um carcter de nova linha. Finalmente, ns fechamos o arquivo. Agora, verifique o contedo do arquivo poema.txt para se certificar de que o programa escreveu e leu o arquivo.

Pickle
Python fornece um mdulo padro chamado pickle, que permite que voc armazene qualquer objeto de Python em um arquivo e ento o pegue novamente mais tarde. Isto chamado de armazenar o objeto 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) Sada:
$ python pickling.py ['ma', 'manga', 'cenoura']

Como funciona: Para armazenar um objeto em um arquivo, ns devemos inicialmente abrir o arquivo com o mdulo open em modo de gravao ('w'rite) e 'b'inrio, para ento chamar a funo dump do mdulo pickle. Este processo chamado pickling. A seguir, ns recuperamos o objeto, usando a funo load do mdulo pickle que retorna o objeto. Este processo chamado unpickling.

Sumrio
Ns discutimos vrios tipos de entrada/sada e tambm o manuseio de arquivos usando o mdulo pickle. A seguir, ns exploraremos o conceito de excees.

Retrieved from "http://www.swaroopch.com/notes/Python_pt-br:Entrada_e_Saida" Category: A Byte of Python in Brazilian

Copyright 2004-2011, Swaroop C H. Content is available under Creative Commons Attribution-Share Alike 3.0 Unported.

Python pt-br:Excecoes
From Notes

Introduo
Excees ocorrem quando determinadas situaes "excepcionais" ocorrem em seu programa. Por exemplo, que tal se voc estiver para ler um arquivo e este no existir? Ou que tal se voc acidentalmente deletou-o durante a execuo do programa? Tais situaes so manipuladas uitizando excees. De modo anlogo, que tal se o seu programa tivesse comandos invlidos? Isso manipulado por Python, que levanta (raise) as mos e avisa a voc que existe 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 levantado e tambm que a localizao onde o erro foi detetado impressa. Isso o que um error handler para este erro faz.

Excees
Ns tentaremos (try) ler a entrada do usurio. Digite ctrl-d e veja o que acontece.
>>> 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

Python levanta um erro chamado EOFError o qual basicamente significa que encontrou um smbolo end of file (fim do arquivo) (representado por ctrl-d) quando no esperaria v-lo.

Manipulando Excees
Ns podemos manipular excees usando o comando try..except. Ns basicamente colocamos os comandos costumeiros dentro do bloco do try 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)) Sada:
$ 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 --> Voc cancelou a operao. $ python try_except.py Enter something --> nenhuma exceo Voc entrou com nenhuma exceo # Press ctrl-c

Como Funciona: Ns colocamos todos os comandos que poderiam levantar excees dentro do bloco do try e ento os 'handlers' para os erros/excees na clusula/bloco except. a clusula except pode manipular um nico erro ou exceo especificada, ou uma lista de erros/excees entre parnteses. Se nenhum nome de erro ou exceo for fornecido, manipular todos os erros ou excees. Note que deve haver pelo menos uma clusula except associada com cada clusula try. Ou no haveria razo para um bloco de try. Se um erro ou exceo no manipulada, ento invocado o Python handler padro que interrompe a execuo do programa e emite uma mensagem de erro. Ns vimos isso em ao acima. Ns podemos tambm ter uma clusula else associada a um bloco try..catch. A clusula else executada se nenhuma exceo ocorrer. No poximo exemplo, ns veremos como obter um objeto exceo de modo que ns possamos recuperar informao adicional.

Levantando Excees
Voc pode levantar excees com o comando raise fornecendo o nome do erro/exceo e o objeto exceo que dever ser lanado (thrown). O erro ou exceo que voc pode levantar dever ser uma classe que direta ou indiretamente 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.') Sada:
$ 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 estamos criando o nosso prprio tipo de Exceo. Este novo tipo de exceo chamado ShortInputException. Ele tem dois campos - length que o comprimento da entrada fornecida e atleast que o mnimo comprimento da entrada que o programa estava esperando. Na clusula except, ns mencionamos a classe de erro que ser guardada as (como) o nome da variable que ir manter o objeto erro/exceo correspondente. Isto anlogo aos parmetros e argumentos em uma chamada de funo. Dentro dessa particular clusula except clause, ns usamos os campos length e atleast do objeto exceo para imprimir uma mensagem apropriada ao usurio.

Try .. Finally
Suponha que voc estivesse lendo um arquivo em seu programa. Como voc poderia assegurar-se que o objeto arquivo estivesse fechado adequadamente, fosse ou no levantada uma exceo? Isso pode ser obtido usando-se o bloco finally. Note que voc pode empregar uma clusula except juntamente com o bloco finally para o mesmo correspondente bloco try. Voc ter que imergir um dentro do outro se quiser utilizar 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)') Sada:
$ 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 efetuamos a tradicional rotina de leitura do arquivo, mas introduzimos arbitrariamente uma pausa ('sleeping') de 2 segundos depois da impresso de cada linha, usando a funo time.sleep de modo que o programa execute lentamente (Python muito rpido por natureza). Enquanto o programa estiver executando, digite ctrl-c para interromper/cancelar o programa. Observe que a exceo KeyboardInterrupt lanada e o programa termina. Entretanto, antes da sada do programa, a clusula finally executada e o objeto arquivo sempre fechado.

O Comando With
Adquirir um recurso no bloco try e liber-lo no bloco finally um padro comum. Da existe tambm 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 sada dever ser a mesma do exemplo anterior. A diferena aqui est em que ns estamos usando a funo opened com o comando with. Isto no congestiona o processamento do arquivo e focaliza no que estamos fazendo com ele. Ns deixamos o fechamento do arquivo a ser realizado automaticamente por opened.

Resumo
Ns discutimos o uso dos comandos try..except e try..finally. Vimos como criar o nosso prprio tipo de exceo e tambm como levantar excees. Em seguida, exploraremos a Python Standard Library (Bibioteca Padro do Python).

Retrieved from "http://www.swaroopch.com/notes/Python_pt-br:Excecoes" Category: A Byte of Python in Brazilian Copyright 2004-2011, Swaroop C H. Content is available under Creative Commons Attribution-Share Alike 3.0 Unported.

Python pt-br:Biblioteca Padrao


From Notes

Introduo
A Biblioteca Padro do Python contm um vasto nmero de mdulos teis e parte de todas as instalaes de Python. importante conhece-la, uma vez que muitos problemas podem ser resolvidos rapidamente se voc estiver familiarizado com o grande nmero de coisas que estas bibliotecas podem fazer. Ns iremos explorar alguns dos mdulos mais usados desta biblioteca. Voc pode encontar detalhes completos para todos os mdulos da Biblioteca Padro do Python na seo 'Library Reference' da documentao que vem com sua instalao do Python. Vamos explorar alguns mdulos teis. Nota Se voc achar estes tpicos muito avanados, voc pode pular este captulo. No entanto, eu realmente recomendo que voc volte para estudar este captulo quando voc estiver familiarizado com a programao usando Python.

Mdulo sys
O mdulo sys contm funcionalidades especficas do sistema. Ns j vimos que a lista sys.argv contm os argumentos da linha de comando. Suponha que ns desejemos checar a verso do Python que est sendo usada para se assegurar que estamos usando a verso 3. O mdulo sys nos d tal funcionalidade. >>> import sys >>> sys.version_info (3, 0, 0, 'beta', 2) >>> sys.version_info[0] >= 3 True Como funciona: O mdulo sys tem a tupla version_info que nos d informaes sobre a verso do Python. O primeiro valor a verso principal. Ns podemos verificar a verso, por exemplo, para garantir que o programa s rode sob o Python 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') Sada:
$ 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 outro mdulo da biblioteca padro chamado warnings, que usado pra mostrar avisos para o usurio final. Se a verso do Python no for 3.0 ou superior, ns mostramos o aviso correspondente.

Mdulo logging
E se voc desejar armazenar mensagens de depurao ou outras mensagens importantes, de forma que voc possa verificar se seu programa est rodando da forma que voc esperava? Como armazenar estas mensagens? Isso pode ser feito 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") Sada:
$python use_logging.py Logging to C:\Users\swaroop\test.log

Se ns verificarmos o contedo de test.log, veremos algomo como isto:


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 trs mdulos da biblioteca padro - o mdulo os para interagir com o sistema operacional, o mdulo platform para informaes sobre a plataforma, i.e. o sistema operacional, e o mdulo logging para registrar informaes. Inicialmente, ns verificamos qual o sistema operacional que estamos usando, verificando a string retornada por platform.platform() (para mais informaes, veja import platform; help(platform) no interpretador Python). Se for o Windows, ns apontamos o diretrio inicial, o caminho e o nome do arquivo no qual queremos armazenar a informao. Juntando estas trs partes, ns teremos a localizao completa do arquivo. Para outras plataformas, ns precisamos conhecer apenas a pasta home do usurio e assim teremos a localizao completa do arquivo. Ns usamos a funo os.path.join() para juntar estas trs partes da localizao. O motivo de usar uma funo especial ao inves de apenas somar as strings, que esta funo se assegura de que a localizao completa esteja de acordo com o formato esperado pelo sistema operacional. Ns configuramos o mdulo logging para escrever todas as mensagens no arquivo especificado, num formato especfico. Finalmente, ns podemos armazenar mensagens teis para depurao, informao, avisos ou

mensagens crticas. Uma vez que o programa tenha rodado, ns podemos verificar este arquivo e, assim, saberemos o que aconteceu no programa, mesmo que nenhuma informao tenha sido mostrada para o usurio durante seu funcionamento.

Mdulos urllib e json


No seria divertido se ns pudssemos escrever nossos prprios programas de busca para internet? Vamos descobrir como faz-los. Isto pode ser feito usando-se alguns mdulos. Primeiro o mdulo urllib que podemos usar para obter qualquer pgina da internet. Poderemos usar o Yahoo! Search para pesquisar resultados e, por sorte, eles podem nos dar os resultados num formato chamado JSON, que podemos analisar facilmente graas ao mdulo embutido json da biblioteca padro. Nota Este programa ainda no funciona devido ao que parece ser um bug no Python 3.0 beta 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 obter resultados de um determinado site, fornecendo o texto que se deseja procurar em um formato especfico. Ns devemos especificar diversas opes, que ns juntamos usando o formato key1=value1&key2=value2, que usado pela funo urllib.parse.urlencode(). Ento, por exemplo, abra este link em seu navegador e voc vera 20 resultados, iniciando do primeiro, para a busca das palavras "byte of python". Este endereo nos d os resultados no formato JSON. Ns realizamos a conexo a este URL usando a funo urllib.request.urlopen() e passando o arquivo obtido para json.load() que ir ler seu contedo e simultneamente converte-li em um objeto Python. Ento ns usamos um loop nestes resultados para mostr-los ao usurio final.

O Mdulo da Semana

H muito mais para ser explorado na biblioteca padro, tal como depurao, uso de opes em linha de comando, expresses comuns e muito mais. A melhor forma de se aprofundar na biblioteca padro ler os excelentes artigos 'Python Module of the Week' de Doug Hellmann.

Sumrio
Ns vimos algumas das funcionalidades de alguns mdulos da Biblioteca Padro do Python. recomendvel que voc navegue pela documentao da Biblioteca Padro do Python para ter uma ideia de tudo que os mdulos so capazes de fazer. A seguir, ns veremos vrios aspectos sobre Python que faro nosso tour mais completo.

Retrieved from "http://www.swaroopch.com/notes/Python_pt-br:Biblioteca_Padrao" Category: A Byte of Python in Brazilian Copyright 2004-2011, Swaroop C H. Content is available under Creative Commons Attribution-Share Alike 3.0 Unported.

Python pt-br:Mais
From Notes

Introduo
At agora ns cobrimos a maior parte dos diversos aspectos que ns usaremos. Neste captulo, ns abordaremos algumas funcionalidades adicionais que tornaro o nosso conhecimento de Python mais completo.

Passando Tuplas Adiante


Algumas vezes voc gostaria de poder retornar com dois valores diferentes de uma funo? Voc pode. Tudo que precisa fazer usar uma tupla. >>> def obtenha_detalhes_erro(): ... return (2, 'detalhes do segundo erro') ... >>> errnum, errstr = obtenha_detalhes_erro() >>> errnum 2 >>> errstr 'detalhes do segundo erro' Note que o uso de a,b = <alguma expressao> interpreta o resulatado da expresso como uma tupla com dois valores. Se quiser interpretar o resultado como (a, <todo o resto>), ento voc precisa acrescentar um asterisco, como se fossem parmetros de uma funo: >>> a, *b = [1, 2, 3, 4] >>> a 1 >>> b [2, 3, 4] Isso tambm significa que o modo mais rpido de trocar duas varaveis entre si em Python : >>> a = 5; b = 8 >>> a, b = b, a >>> a, b (8, 5)

Mtodos Especiais
Existem certos mtodos tais como __init__ e __del__ que possuem significado especial em classes. Os mtodos especiais so empregados para emular certos comportamentos dos tipos 'built-in'. Por exemplo, se voc quiser usar a operao de indexao x[indice] para a sua classe (exatamente como voc faria para listas e tuplas), ento tudo o que voc deve fazer implementar o mtodo __getitem__() e est feito. Se voc refletir a respeito, isto o que Python faz no caso da prpria classe das listas! Alguns mtodos especiais teis esto listados na tabela que segue. Se voc quiser conhecer mais a respeito de todos os mtodos especiais, veja o manual. Alguns Mtodos Especiais Nome Explicao

__init__(self, ...) Este mtodo chamado imediatamente antes que o novo objeto criado esteja pronto para utilizao. __del__(self) Chamado imediatamente antes que o objeto seja destrudo. __str__(self) Chamado quando ns usamos a funo print ou quando str() usado. __lt__(self, other) Chamado quando o operador 'menor do que' (<) usado. Similarmente, existem mtodos especiais para todos os operadores (+, >, etc.) __getitem__(self, key) Chamado quando a operao de indexao x[key] usada. __len__(self) Chamado quando a funo 'built-in' len() utilizada para um objeto sequncia.

Blocos de Um nico Comando


Ns j vimos que cada bloco de comandos posto separadamente do resto pelo seu prprio nvel de indentao. Bem, existem algumas excees. Se o seu bloco de comandos contm apenas um nico comando, ento voc poder especific-lo na mesma linha de, digamos, um comando condicional ou em lao. O seguinte exemplo dever tornar 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 tornar menor o seu programa, eu aconselho a evitar este procedimento em curto-circuito, exceto no caso de verficao de erro, uma vez que ficar muito mais fcil acrescentar um comando a mais se voc estiver usando a indentao apropriada.

Formas Lambda
Uma forma lambda empregada para criar novos objetos funes e retorn-los em tempo de execuo ('runtime'). 1. !/usr/bin/python 2. Nome do arquivo: lambda.py def cria_repetidor(n):

return lambda s: s * n

dobro = cria_repetidor(2) print(dobro('palavra')) print(dobro(5)) Sada:


$ python lambda.py palavrapalavra 10

Como Funciona: Aqui ns desenvolvemos uma funo cria_repetidor para fabricar novos objetos funes em tempo de execuo e retorn-los. Um comando lambda utilizado para criar o objeto funo. Essencialmente lambda recebe um parmetro seguido de apenas uma nica expresso, a qual se torna o corpo da funo e o valor dessa expresso retornado pela nova funo. Note que mesmo um comando print (Python 2.x) no pode ser usado no interior de uma forma lambda, apenas expresses. A SER FEITO
Podemos realizar uma list.sort() fornecendo uma funo de comparao criada usando lambda?

pontos = [ { 'x' : 2, 'y' : 3 }, { 'x' : 4, 'y' : 1 } ] 1. pontos.sort(lambda a, b : cmp(a['x'], b['x']))

List Comprehension
'List comprehensions' so empregadas para obter-se uma nova lista de uma lista existente. Suponha que voc tenha uma lista de nmeros e deseje obter uma nova lista com todos os nmeros multiplicados por dois apenas quando o nmero por sua vez for maior do que 2. 'List comprehensions' so ideais para tais situaes. 1. !/usr/bin/python 2. Nome do arquivo: list_comprehension.py listaum = [2, 3, 4] listadois = [2*i for i in listaum if i > 2] print(listadois) Sada: [2, 6, 8] Como Funciona: Aqui ns obtemos uma nova lista atravs da especificao da manipulao a ser efetuada quando alguma condio for satisfeita (if i > 2). Note que a lista original permanece inalterada. A vantagem de usar 'list comprehensions' que reduz a quantidade de cdigo padro ('boilerplate') requerido quando ns usamos laos para processar cada elemento de uma lista e adicion-lo em uma nova lista.

Recebendo Tuplas e Dicionrios em Funes


Existe um modo especial de atribuir parmetros a uma funo como uma tupla ou dicionrio, usando

os prefixos * e ** respectivamente. Isso muito til quando se considera um nmero varivel de argumentos na funo. >>> def powersum(power, *args): ... Retorna a soma de cada argumento elevada potncia especificada. ... total = 0 ... for i in args: ... total += pow(i, power) ... return total ... >>> powersum(2, 3, 4) 25 >>> powersum(2, 10) 100 Uma vez que temos um prefixo * na varivel args, todos os argumentos extra passados funo so atribudos a args como uma tupla. Se ao invs disso, tivesse sido usado um prefixo **, os parmetros extra seriam considerados como pares chave/valor de um dicionrio.

Os Comandos Exec E Eval


A funo exec empregada para executar comandos em Python que esto armazenados em uma string ou arquivo, ao contrrio do que se estivessem no prprio programa. Por exemplo, ns podemos gerar uma string contendo comandos em Python em tempo de execuo e ento execut-los utilizando a funo exec: >>> exec('print("Hello World"')) Hello World De modo anlogo, a funo eval utilizada para avaliar expresses vlidas em Python que esto armazenadas em uma string. Um exemplo simples mostrado 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 certo que ter pelo menos um elemento em uma lista que voc est usando e quer verificar esse fato e levantar ('raise') um erro se isso no for verdade, ento o comando assert ideal para essa situao. Quando um comando assert falha, um AssertionError levantado. >>> mylist = ['item'] >>> assert len(mylist) >= 1 >>> mylist.pop() 'item' >>> mylist [] >>> assert len(mylist) >= 1 Traceback (most recent call last):
File "<stdin>", line 1, in <module>

AssertionError O comando assert deve ser usado com cautela. Na maior parte dos casos, melhor capturar excees, seja manipulando o problema, ou emitindo uma mensagem de erro para o usurio e saindo do programa.

A Funo Repr
A funo repr utilizada para obter-se uma representao por meio de uma string cannica do objeto. A parte interessante que voc ter eval(repr(objeto)) == objeto em quase todos os casos.

>>> i = [] >>> i.append('item') >>> repr(i) "['item']" >>> eval(repr(i)) ['item'] >>> eval(repr(i)) == i True Basicamente, a funo repr empregada para obter-se uma representao imprimvel do objeto. Voc pode controlar o que a sua classe retorna sob a funo repr, definindo o mtodo __repr__ em sua classe.

Resumo
Ns abordamos algumas funcionalidades adicionais de Python neste captulo e mesmo assim no cobrimos todas elas. Porm, a essa etapa, ns apresentamos a maior parte do que voc ir empregar na prtica. Isso suficiente para que voc possa iniciar com quaisquer programas que for produzir. A seguir, ns discutiremos como explorar Python ainda mais. Retrieved from "http://www.swaroopch.com/notes/Python_pt-br:Mais" Copyright 2004-2011, Swaroop C H. Content is available under Creative Commons Attribution-Share Alike 3.0 Unported.

Python pt-br:Em Seguida


From Notes
Se voc leu este livro completamente at agora e praticou escrevendo muitos programas, ento deve estar se sentindo confortvel e familiarizado com Python. Voc provavelmente tambm criou diversos programas em Python para realizar alguns experimentos e exercitar suas habilidades em Python. Se voc no fez isso ainda, deveria t-lo feito. A questo agora "O Que Fazer Em Seguida?". Eu sugiro que voc ataque o seguinte problema: Crie o seu prprio programa "address_book" usando linha de comando, com o qual voc poder adicionar, modificar, deletar ou realizar buscas pelos seus contatos, tais como amigos, familiares e colegas, bem como pelas suas informaes, tais como endereos de email e/ou nmeros de telefone. Os detalhes devem ser armazenados para posterior recuperao. Isto se torna razoavelmente fcil se voc pensar em termos de todo o material que ns encontramos at agora. Se voc ainda assim deseja instrues de como proceder, aqui est uma sugesto. Sugesto (No leia) Crie uma classe que represente a informao sobre cada pessoa. Use um dicionrio para guardar os objetos pessoais com o nome de cada uma como chave. Utilize o mdulo pickle para guardar os objetos de forma persistente em seu disco rgido. Empregue os mtodos internos do dicionrio para adicionar, deletar e modificar as pessoas. Uma vez que voc seja capaz de realizar isso, voc pode proclamar-se programador em Python. Agora, imediatamente envie um email me agradecendo por este grande livro ;-). Este passo opcional mas recomendado. Da mesma forma, por favor, considere realizar uma doao, contribuir com melhoramentos ou voluntariar-se para tradues para apoiar o contnuo desenvolvimento deste livro. Se voc achou muito fcil aquele programa, aqui est um outro: Implemente o comando replace. Este comando substituir uma string por outra em uma lista de arquivos fornecida. O comando replace pode ser to simples ou sofisticado quanto voc desejar, desde simples substituio de strings, at a busca por padres (expresses regulares). Depois disso, aqui esto alguns caminhos para prosseguir a sua jornada com Python:

Exemplos de Programas
A melhor maneira de aprender uma linguagem de programao escrever muitos programas e ler um monte deles: Repositrio de programas Rosetta Exemplos de Python examples em java2s Python Cookbook uma coleo extremamente valiosa de receitas ou sugestes em como resolver certas espcies de problemas utilizando Python. Esta uma leitura indispensvel para todos os usurios de Python. Python Brasil. Este o principal site brasileiro de Python.

Perguntas e Respostas
Oficial Python Dos e Don'ts (Faa Isso e No Faa Aquilo) Python FAQ Oficial

Lista de Norvig das Infrequently Asked Questions (Perguntas Raramente Feitas) Entrevista em Python Q & A Perguntas StackOverflow marcadas com python

Tips and Tricks (Sugestes e Truques)


Python Tips & Tricks Advanced Software Carpentry using Python Charming Python uma excelente srie de artigos de David Mertz relacionados com Python.

Livros, Publicaes, Tutoriais, Vdeos


O prximo passo lgico depois deste livro a leitura do extraordinrio livro de Mark Pilgrim Dive Into Python (Mergulhando em Python) o qual voc pode tambm ler inteiramente on line. Esse livro explora tpicos como expresses regulares, processamento XML, servios web, teste unitrio (unit testing), etc. em detalhes. Outros recursos adicionais so: vdeos ShowMeDo sobre Python Lista completa de Awaretek dos tutoriais em Python The Effbot's Python Zone Links no fim de cada Python-URL! email Python Papers

Discusso
Se voc parece incapaz de resolver um problema de Python, e no sabe a quem perguntar, ento a lista comp.lang.python discussion group o melhor lugar para colocar a sua questo. Certifique-se de fazer sua 'lio de casa' e de haver tentado resolver o seu problema por voc mesmo antes de mais nada. Make sure you do your homework and have tried solving the problem yourself first.

Novidades
Se voc quiser conhecer as ltimas novidades no mundo de Python, ento acompanhe o Python Planet oficial e/ou o Python Planet no-oficial.

Instalando Bibliotecas
Existe um nmero enorme de bibliotecas open-source no Python Package Index as quais voc pode empregar em seus prprios programas. Para instalar aquelas bibliotecas, voc pode usar o excelente EasyInstall tool de Philip Eby.

Software Grfico
Suponha que voc queira criar seus prprios programas grficos usando Python. Isso pode ser feito por meio de um biblioteca GUI (Graphical User Interface) com suas interfaces vnculos (bindings) com Python. Interfaces so o que permite que voc escreva programas em Python e utilize as bibliotecas que, por sua vez, so escritas em C, C++ ou outras linguagens. Existem um grande nmero de opes para GUI usando Python: PyQt Esta a interface em Python para o Qt toolkit que a fundao sobre a qual KDE foi produzido. Qt extremamente fcil de usar e muito poderosa, especialmente devido ao Qt Designer e a incrivel documentao. PyOt livre se voc quiser criar software open-source (GPL) e pago, se voc for desenvolver software proprietrio fechado. Para iniciar, leia o PyQt tutorial ou o PyQt

book. PyGTK Esta a interface em Python para o GTK+ toolkit que a fundao sobre a qual Gnome foi produzido. GTK+ possui muitos pequenos problemas para o seu uso, mas uma vez que voc se torna confortvel, poder criar aplicativos com GUI rapidamente. A interface grfica Glade indispensvel. A documentao ainda deve ser emlhorada. GTK+ funciona bem em Linux, mas a sua verso para Windows est incompleta. Voc pode criar softwares tanto livres, como proprietrios usando GTK+. Para iniciar, leia o PyGTK tutorial. wxPython Este a interface em Python para o wxWidgets toolkit. wxPython tem uma curva de aprendizagem associada. Entretanto, bem portvel e executa em Linux, Windows, MAC e mesmo em plataformas imersas (embedded). Existem muitas IDEs disponveis em wxPython as quais incluem GUI designers, tais como SPE (Stani's Python Editor) e a construtora de GUIs wxGlade. Voc pode criar software tanto livre como proprietrio usando wxPython. Para iniciar, leia o wxPython tutorial. TkInter Este dos mais antigos GUI toolkits em existncia. Se voc tem utilizado IDLE, j viu o programa TkInter em ao. No oferece uma das melhores sensaes para o usurio, devido a sua aparncia antiquada. TkInter portvel e executa tanto em Linux/Unix, quanto em Windows. Mas importante que tuso, TkInter parte integrante da distribuio padro de Python. Para iniciar, leia o Tkinter tutorial. Para mais opes, veja o wiki GuiProgramming no website oficial de Python.

Resumo das Ferramentas GUI


Infelizmente, no existe uma ferramenta GUI padro em Python. Eu sugiro que voc escolha uma das anteriores, dependendo de sua situao. O primeiro fator se voc est disposto a pagar para usar qualquer uma das ferramentas GUI. O segundo fator se voc quer que seu programa execute apenas em Windows ou em MAC e Linux, ou em todos eles. O terceiro fator, se Linux for a plataforma escolhida, se voc um usurio de KDE ou de GNOME. Para uma anlise mais detalhada e completa, veja a pgina 26 de The Python Papers, Volume 3, Issue 1.

Vrias Implementaes
EXistem usualmente duas partes em uma linguagem de programao - a linguagem e o software. A linguagem "como" ns escrevemos algo. O software "o que" realmente executa o nossos programas. Ns vimos uitlizando o software "CPython" para executar os nossos programas. Este referenciado como CPython, pois escrito na linguagem C e o "Interpretador Python Clssico". Existem adicionalmente outros softwares que podem executar seus programas em Python: Jython Uma implementao de Python que executa na plataforma Java. Isso significa que voc pode usar as bibliotecas e classes em Java dentro da linguagem Python e vice-versa. IronPython Uma implementao de Python que executa em plataforma .NET. Isso significa que voc pode usar as bibliotecas e classes .NET dentro da linguagem Python e vice-versa. PyPy Uma implementao de Python escrita em Python! Este um projeto de pesquisa para tornar mais fcil e rpido o interpretador, uma vez que o poprio interpretador est escrito em uma linguagem dinmica (em oposio a linguagens estticas, tais como C, Java, ou C# nas

implementaes acima). Stackless Python Uma implementao que especializada em performance baseada em threads. Existem tambm outras tais como CLPython - uma implementao de Python escrita em Common Lisp e IronMonkey, que uma implementao de IronPython para operar sobre um interpretador JavaScript, o que poderia significar que voc poderia usar Python (ao invs de JavaScript) para escrever os seus programas web-browser ("Ajax"). Cada uma dessas implementaes tm a sua prpria rea especializada na qual so teis.

Resumo
Ns chegamos ao final deste livro, mas, como se diz comumente, este "o comeo do fim"! Voc , agora, um vido usurio de Python e est sem dvida pronto para resolver muitos problemas utilizando Python. Voc pode iniciar por automatizar o seu computador para realizar toda espcie de coisas que sequer podiam ser imaginadas anteriormente, ou por escrever seus prprios jogos e muito, muito mais. Assim, pode comear! Retrieved from "http://www.swaroopch.com/notes/Python_pt-br:Em_Seguida" Category: A Byte of Python in Brazilian Copyright 2004-2011, Swaroop C H. Content is available under Creative Commons Attribution-Share Alike 3.0 Unported.

Python pt-br:Apendice FLOSS


From Notes

Software Gratuito e Livre (Free/Libr and Open Source Software - FLOSS)


FLOSS est baseado no conceito de uma comunidade, que por sua vez est fundamentado no conceito de compartilhamento, e particularmente compartilhamento de conhecimento. FLOSS so livres para uso, modificao e redistribuio. Se voc j leu este livro, ento j est familiarizado com FLOSS, desde que voc vem empregando Python ao longo dele e Python um software de fonte aberta (open source)! Aqui esto alguns exemplos de FLOSS para dar-lhe uma idia do tipo de coisas que a construo e compartilhamento comunitrio pode criar: Linux. Este um sistema operacional FLOSS que o mundo inteiro est lentamente adotando! Comeou com Linus Torvalds enquanto um estudante. Agora, est competindo com o Microsoft Windows. [ Linux Kernel ] Ubuntu. Esta uma distribuio gerenciada pela comunidade, patrocinada pela Canonical e a distribuio de Linux mais popular hoje em dia. Permite que voc instale uma quantidade enorme de FLOSS disponveis e isso em uma maneira fcil de usar e fcil de instalar. Melhor que tudo, voc pode apenas reiniciar o seu computador e executar Linux diretamente do CD! Isto permite que voc experimente completamente o novo SO antes de instalar no seu computador. [ Ubuntu Linux ] OpenOffice.org. Esta uma excelente suite de escritrio com componentes para processamento de documento, apresentao, planilhas, desenho, entre outras coisas. Voc pode at mesmo abrir e editar arquivos de MS Word e MS PowerPoint com facilidade. Ela executa em quase todas as plataformas. [ OpenOffice ] Mozilla Firefox. Esta a poxima gerao de navegadores para a web que est competindo com o Internet Explorer. bastante rpida e tem recebido aclamao crtica pelos suas timas e atraentes caractersticas. O conceito de extenses permite o emprego de qualquer espcie de plugin. O seu produto companheiro Thunderbird um excelente cliente de email que torna muito fcil a leitura de emails. [ Mozilla Firefox, Mozilla Thunderbird ] Mono. Esta uma implementao de fonte aberta da plataforma .NET da Microsoft. Permite que as aplicaes .NET sejam criadas e executadas em Linux, Windows, FreeBSD, Mac OS e muitas outras plataformas. [ Mono, ECMA, Microsoft .NET ] Servidor de web Apache. Este um popular servidor de web. De fato, o mais popular servidor de web do planeta! Ele executa em um pouco mais do que a metade de todos os sites web que existem. Sim, isso mesmo - Apache gerencia mais sites web do que toda a concorrncia (incluindo Microsoft IIS) combinada. [ Apache ] MySQL. Este um servidor de bancos de dados extremamente popular. muito famoso pela grande velocidade. o M na famosa pilha LAMP subjacente na maior parte dos sites web na internet. [ MySQL ] VLC Player. Este o tocador de vdeo que pode tocar qualuqer coisa de DivX a MP3 a OGG, a VCDs e DVDs a ... que disse que software aberto no seria divertido? ;-) [ VLC media player ] GeexBox uma distribuio de Linux que projetada para tocar filmes assim que voc reinicia do CD! [ GeexBox ] Esta lista tem apenas a inteno de dar-lhe uma breve idia - existem muitos mais excelentes FLOSS disponveis, tais como a linguagem PERL, a linguagem PHP, os sistemas de gerenciamento de contedo para sites web PLONE e Drupal, o servidor de banco de dados PostgreSQL, o jogo de corridas TORCS, a IDE KDevelop, o tocador de filmes Xine, o editor VIM, o editor Quanta+, o tocador de udio Banshee, o

programa de edio de imagens GIMP ... Esta lista poderia no terminar jamais. Para obter as ltimas notcias sobre o mundo FLOSS, verifique os seguintes sites web: linux.com LinuxToday NewsForge DistroWatch Visite os seguintes sites web para maiores informaes sobre FLOSS: SourceForge FreshMeat Assim, v em frente e explore o vasto, livre e aberto mundo de FLOSS! Retrieved from "http://www.swaroopch.com/notes/Python_pt-br:Apendice_FLOSS" Category: A Byte of Python in Brazilian Copyright 2004-2011, Swaroop C H. Content is available under Creative Commons Attribution-Share Alike 3.0 Unported.

Python pt-br:Apendice Sobre


From Notes

Clofon
Quse todos os softwares que eu usei na criao deste livro so softwares livres e abertos.

Nascimento do Livro
No primeiro esboo deste livro, eu usei Linux Red Hat 9.0 como a fundao da minha estrutura e no sexto esboo eu usei Linux Fedora Core 3 como a base do meu esquema. Inicialmente, eu estava usando KWord para escrever o livro (como explicado em Lio de Histria no prefcio).

Era Adolescente
Mais tarde, eu mudei para DocBook XML usando Kate mas eu achei muito montono. Assim, eu mudei para OppenOffice, que era excelente com o nvel de controle que fornecia para formatao, assim como a gerao de PDF, mas produzia um pssimo HTML do documento. Finalmente, eu descobri XEmacs e reescrevi o livro desde o comeo em DocBook XML (novamente) depois de decidir que aquele formato era a soluo de longo prazo. No sexto esboo, eu decidi usar Quanta+ para realizar toda a edio. As stylesheets que vieram junto com o Linux Fedora Core 3 foram utilizadas, assim como as fontes padro. Entreanto, eu havia escrito um documento CSS para fornecer cor e estilo s pginas HTML. Eu havia escrito tambm um analisador lxico grosseiro, em Python, que automaticamente forneceu nfase na sintaxe para as todas as listagens dos programas.

Agora
Para este stimo esboo, eu estou usando MediaWiki como a base do meu setup. Agora, eu edito tudo online e os leitores podem diretamente ler/editar/discutir dentro do site wiki. Eu ainda uso Vim para edio graas a ViewSourceWith extenso para Firefox que integra-se com Vim.

Sobre o Autor
http://www.swaroopch.com/about/

Retrieved from "http://www.swaroopch.com/notes/Python_pt-br:Apendice_Sobre" Category: A Byte of Python in Brazilian Copyright 2004-2011, Swaroop C H. Content is available under Creative Commons Attribution-Share Alike 3.0 Unported.

Python pt-br:Apendice Historico de Revisoes


From Notes
1.90 04/09/2008 e ainda em progresso. Reavivado depois de um hiato de 3.5 anos! Updating to Python 3.0 Reescrito usando MediaWiki (novamente) 1.20 13/01/2005 Completamente reescrito usando Quanta+ em FC3 com muitas correes e atualizaes. Muitos 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 digitao, graas aos meus leitores entusisticos e colaborativos. 1.00 08/03/2004 Depois de uma enorme resposta e sugestes de meus leitores, eu fiz revises significativas no contedo, juntamente com correes de digitao. 0.99 22/02/2004 Adicionei um novo captulo sobre mdulos. Acrescentei detalhes a respeito do nmero varivel de argumentos em funes. 0.98 16/02/2004 Escrevi um script Python e um stylesheet CSS para melhorar a sada XML, incluindo um grosseiro porm funcional analisador lxico para uma nfase automtica, no estilo de VIM, na sintaxe de listagens de programas. 0.97 13/02/2004 Masi um rascunho completamente reescrito, em DocBook XML (novamente). O livro melhorou muito - est agora mais coerente e legvel. 0.93 25/01/2004 Adicionei trechos em IDLE e material mais especificamente voltado a Windows. 0.92 05/01/2004 Mudanas em uns poucos exemplos. 0.91 30/12/2003 Erros de digitao corrigidos. Muitos tpicos improvisados. 0.90 18/12/2003 Mais dois captulos acrescentados. Formato de OppenOffice com revises.

0.60 21/11/2003 Completamente reescrito e expandido. 0.20 20/11/2003 Aguns erros, alguns de digitao, corrigidos. 0.15 20/11/2003 Convertido para DocBook XML. 0.10 14/11/2003 Rascunho inicial usando KWord.

Retrieved from "http://www.swaroopch.com/notes/Python_pt-br:Apendice_Historico_de_Revisoes" Category: A Byte of Python in Brazilian Copyright 2004-2011, Swaroop C H. Content is available under Creative Commons Attribution-Share Alike 3.0 Unported.