A Byte of Python[Pt-br]-Swaroop Ch

228

Transcript of A Byte of Python[Pt-br]-Swaroop Ch

  • ndicePrefcioIntroduoInstalaoPrimeiros PassosFundamentosOperadores e ExpressesControle de FluxoFunesMdulosEstruturas de DadosResoluo de ProblemasProgramao Orientada a ObjetosEntrada e SadaBiblioteca PadroMaisEm SeguidaApndice: FLOSSApndice: SobreApndice: Histrico de RevisesSobre a Traduo

  • PrefcioPython provavelmente uma das poucas linguagens de programao que so ao mesmo temposimples e poderosas. Isso bom tanto para iniciantes quanto para programadores avanados e, maisimportante, divertida de programar. Este livro visa ajud-lo a aprender essa linguagem maravilhosae mostrar como fazer as coisas de modo rpido e indolor - de fato 'O Antdoto Perfeito para seusproblemas de programao'.

  • Contedo

    1 A Quem Se Destina Este Livro2 Lio de Histria3 Status do Livro4 Site Oficial5 Licena6 Feedback7 Algo Para Pensar

  • A Quem Se Destina Este Livro

    Este livro serve como guia ou tutorial da linguagem de programao Python. Ele destinadoprincipalmente a iniciantes, mas tambm til para programadores experientes.

    O objetivo que, se tudo o que voc sabe sobre computadores como salvar arquivos de texto, entovoc possa tambm aprender Python com este livro.

    Se voc tem experincia prvia com programao, pode se interessar pelas diferenas entre Python esua linguagem de programao favorita - coloquei em destaque muitas delas. No entanto, umapequena 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 queeu escrevi chamado 'Diamond', para que eu pudesse instal-lo facilmente. Eu tive que escolher entreas referncias Python e Perl para a biblioteca Qt. Eu fiz algumas pesquisas na internet e encontrei umartigo onde Eric S. Raymond, um hacker famoso e respeitado, falou como o Python tornou-se sualinguagem de programao favorita. Eu tambm descobri que as referncias PyQt eram mais madurasquando 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! Euachei alguns livros da O'Reilly, mas eles ou eram muito caros ou pareciam mais com um manual dereferncia 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 eracompleta. Eu me sa bem, pois eu tinha uma experincia prvia em programao, mas adocumentao era inadequada para novatos.

    Cerca de seis meses aps a minha primeira luta com o Python, eu instalei a (at ento) ltimadistribuio Linux, Red Hat 9.0, e eu estava aprendendo entusiasmado o KWord. Eu o adorei eimediatamente tive a idia de escrever alguma coisa em Python. Eu comecei escrevendo umas poucaspginas, mas elas tornaram-se rapidamente um documento de 30 pginas. Ento, eu tornei sria aidia de transform-lo em algo mais til na forma de um livro. Aps uma "grande quantidade" dereescritas, o livro atingiu um estgio onde ele se tornou um guia til de aprendizado da linguagemPython. Eu considero que este livro minha contribuio e meu tributo comunidade do cdigo fonteaberto.

    Este livro comeou a partir das minhas notas pessoais em Python e eu ainda o considero da mesmamaneira, 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 ecomentrios 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 olanamento do Python 3.0 (esperado para Agosto/Setembro de 2008). Uma vez que a linguagemPython 3.0 em si ainda no foi finalizada/disponibilizada, este livro estar passando por constantesmudanas. No entanto, de acordo com o esprito da filosofia open source do "Release Early, ReleaseOften" (entregar cedo e com freqncia), o livro atualizado foi lanado e est sendo atualizadoconstantemente.

    O livro precisa da ajuda de leitores como vocs para apontar quaisquer partes do livro que noestejam boas, incompreensveis ou simplesmente erradas. Por favor, escreva para o autor principalou para os respectivos tradutores com seus comentrios e sugestes.

    um esforo constante equilibrar este livro entre as necessidades dos iniciantes e a tendncia nosentido de completude da informao. Seria til se os leitores tambm dessem sua opiniao sobre oquanto 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 nantegra 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-ShareAlike 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 oulicenciador (mas no de forma a sugerir que eles endossam voc ou o uso que fizerdeste livro).Uso no comercial. Voc no pode usar este livro para fins comerciais.Compartilhamento pela mesma Licena. Se voc alterar transformar ou se basearneste 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 apermisso 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 aindicao 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, amenos que indicado de outro modo.

    4. Contribuies voluntrias para este livro original devem estar sob esta mesma licena e ocopyright 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 foipossvel. No entanto, caso voc ache que alguma parte do material esteja inconsistente, incorreta ousimplesmente precise melhorar, ento por favor me informe, para que eu possa fazer as melhoriascabveis. 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 pontode que, obviamente, no haja deficincias; a outra faz-lo to complicado de modo que nohaja deficincias bvias.-- C. A. R. Hoare

    Sucesso na vida menos uma questo de talento e oportunidade quanto de concentrao eperseverana.-- C. W. Wendte

  • Introduo

  • Contedo

    1 Introduo2 Caractersticas de Python3 Por que no Perl?4 Por que no Ruby?5 O Que Os Programadores Dizem6 Sobre Python 3.0

  • Introduo

    Python uma dessas raras linguagens em que se pode alegar ser ao mesmo tempo simples epoderosa. Voc vai se surpreender ao descobrir o quanto fcil se concentrar na soluo para oproblema 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 estruturasde dados de alto-nvel e uma simples e efetiva abordagem para programao orientada aobjetos. 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 emdiversas reas e na maioria das plataformas.

    Vou detalhar a maioria dessas caractersticas na prxima seo.

    NotaGuido van Rossum, criador da linguagem Python, cujo nome foi baseado na srie "MontyPython's Flying Circus" da BBC. Ele, particularmente, no gosta de cobras que para sealimentar, esmagam outros animais usando seu extenso corpo.

  • Caractersticas de Python

    Simples

    Python uma linguagem simples e minimalista. Ler um bom programa em Python quase comoler 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 eno na linguagem em si.

    Fcil de Aprender

    Como voc ver, extremamente fcil iniciar-se em Python. A linguagem possui uma sintaxeextraordinariamente simples, como j mencionado.

    Livre e de Cdigo Aberto

    Python um exemplo de FLOSS (Free/Libre and Open Source Software). Traduzindo, vocpode distribuir livremente cpias deste software, ler seu cdigo-fonte, modific-lo, usar trechosem novos programas livres e tudo o que voc quiser fazer. FLOSS baseado no conceito deuma comunidade que compartilha conhecimento. Este um dos motivos pelos quais Python tobom - ele vem sendo criado e constantemente melhorado por uma comunidade que simplesmentequer ver a Python cada vez melhor.

    Linguagem de Alto Nvel

    Quando voc escreve programas em Python, no h necessidade de se preocupar com detalhesde 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 parafuncionar) em muitas plataformas. Todos os seus programas em Python podem rodar emqualquer uma destas plataformas sem precisar de mudanas, desde que voc seja cuidadoso osuficiente 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 linguagemde 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 aexecut-lo.

    Python, por sua vez, no necessita de compilao para cdigo binrio. Voc simplementeexecuta o programa diretamente do cdigo-fonte. Internamente, Python converte o cdigo-fonteem um formato intermedirio chamado bytecode, o traduz para a linguagem nativa do seucomputador e ento o executa. Tudo isso, na verdade, torna Python muito mais fcil, uma vezque voc no precisa se preocupar com a compilao do programa, certificar-se que asbibliotecas necessrias esto todas linkeditadas e carregadas etc, etc. Isto tambm torna seusprogramas em Python muito mais portveis, j que voc pode simplesmente copiar seu programaem Python em outro computador e execut-lo!

    Orientada a Objetos

    Python suporta tanto programao procedural (estruturada) quanto orientada a objetos. Emlinguagens procedurais, o programa construdo com base em procedimentos e funes, quenada mais so que trechos reutilizveis de programas. Em linguagens orientadas a objeto, combase em objetos que combinam dados e funcionalidade. Python tem uma maneira simples maspoderosa de implementar programao orientada a objetos, especialmente quando comparada alinguagens como C++ ou Java.

    Extensvel

    Se voc precisa que um trecho crtico de cdigo seja executado com muita rapidez ou quer queparte de algum algoritmo no seja aberta, voc pode codific-los em C ou C++ e ento us-los apartir de seu programa Python.

    Embarcvel

    Voc pode embarcar Pyhton em seus programas C/C++ para fornecer funcionalidades descripting aos usurios dos programas.

    Bibliotecas Extensivas

    A Biblioteca Padro do Python (Python Standard Library) de fato enorme. Ela pode ajud-lo afazer 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 outrascoisas dependentes do sistema. Lembre-se de que tudo isto est disponvel onde quer quePython esteja instalado. Esta a chamada filosofia das "Pilhas Includas" do Python.

    Alm da biblioteca padro, existem vrias outras bibliotecas de alta qualidade, tais comoswxPython , Twisted, Python Imaging Library e muitas outras.

  • Python , de fato, uma linguagem poderosa e empolgante. Ela possui a combinao exata dedesempenho 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 abertoextremamente popular.

    Se voc alguma vez tentou escrever um programa grande em Perl, voc poderia ter respondido essapergunta sozinho! Em outras palavras, programas em Perl so fceis quando eles so pequenos e soexcelentes para pequenos "hacks" e scripts "pra fazer o servio". No entanto, eles se tornamrapidamente difceis de manter medida em que se tornam maiores. E estou falando isso com base naminha experincia no Yahoo! escrevendo programas grandes em Perl.

    Quando comparados a Perl, os programas em Python so definitivamente mais simples, claros, fceisde escrever e, consequentemente, mais legveis e fceis de manter. Eu admiro Perl e uso diariamentepara 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 alinguagem toda um grande (mas timo) hack. Infelizmente, o futuro Perl 6 no parece trazernenhuma 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 mdulosPerl e simplesmente inacreditvel, por causa de seu tamanho e profundidade - voc pode fazerpraticamente 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 maistempo. 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 ouaprender Ruby, ento eu recomendaria Python, unicamente pela perspectiva de facilidade deaprendizado. Pessoalmente, achei difcil compreender a linguagem Ruby, mas todas as pessoas queconseguem 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 otermo 'Open Source'. Ele diz que Python se tornou sua linguagem de programao favorita. Esteartigo 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 quenenhuma outra linguagem o deixou to produtivo quanto Python. Diz ainda que Python talvez anica linguagem que se concentra em tornar as coisas mais fceis para o programador. Leia aentrevista 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 doGoogle. Esta afirmao pode ser comprovada verificando a pgina do Google Jobs que listaconhecimento 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 comoPython 3000 ou Py3k.

    A motivao principal para uma nova verso de Python remover todos os pequenos problemas edetalhes 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 cdigo2.x para 3.x.

    Mais detalhes em:

    Introduo por Guido van RossumO que h de novo no Python 2.6 (recursos significativamente diferentes das verses anterioresde Python 2.x e que provavelmente sero includos no Python 3.0)O que h de novo no Python 3.0Cronograma de lanamento do Python 2.6 e 3.0Python 3000 (a lista oficial de mudanas propostas)Planos diversos para Python 3.0Novidades do Python (lista detalhada das mudanas)

  • InstalaoSe voc j tem o Python 2.x instalado, no preciso remov-lo para instalar o Python 3.0. Voc podemanter ambos instalados ao mesmo tempo.

  • Contedo

    1 Para usurios Linux e BSD2 Para usurios Windows

    2.1 Prompt do DOS3 Para usurios MAC OS X4 Sumrio

  • Para usurios Linux e BSD

    Se voc est usando uma distribuio Linux como Ubuntu, Fedora, OpenSUSE ou {coloque suaescolha aqu}, ou um sistema BSD tal como FreeBSD, ento provvel que voc j tenha o Pythoninstalado em seu sistema.

    Para testar se o Python j est instalado em seu Linux, abra um shell (como konsole ou gnome-terminal) 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 seusistema operacional, portanto eu indicarei o prompt apenas pelo smbolo $.

    Se voc v alguma informao sobre a verso, como mostrado acima, ento o Python j estinstalado.

    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 acompilao so informadas no website do Python.Instalar os pacotes binrios usando um gerenciador de pacotes que vem com o seu sistemaoperacional, tal como apt-get no Ubuntu/Debian e outros Linux baseados em Debian, yum noFedora, pkg_add no FreeBSD, etc. Voc precisar de uma conexo com a internet para usar estemtodo. 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 verso3.0 beta 1, quando este livro foi escrito. Ele tem apenas 12.8 MB, o que bem compacto quandocomparado com a maioria das outras linguagens ou programas.

    CuidadoQuando for dada a opo para voc desmarcar componentes opcionais, no desmaque nenhum!Alguns destes componentes podesm ser teis para voc, especialmente IDLE.

    Um fato interessante que usurios Windows so os que mais baixam os arquivos do Python. claroque isso no fornece uma viso geral, uma vez que quase todos os usurios Linux j tm o Pythoninstalado 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 deSistema', ento selecione Editar e adicione ;C:\Python30 no fim do que j estiver l. claro quevoc 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 arquivoAUTOEXEC.NT.

  • Para usurios MAC OS X

    Usurios Mac OS X j encontraro o Python instalado em seu sistema. Abra o Terminal.app e rodepython - 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 podeinstal-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 frentens assumiremos que voc j est com o Python instalado em seu sistema.

    A seguir ns escreveremos nosso primeiro programa em Python.

  • Primeiros Passos

  • Contedo

    1 Introduo2 Usando o Prompt do Interpretador3 Escolhendo um Editor4 Usando um Arquivo Fonte

    4.1 Como ele Funciona4.2 Programas Executveis em Python

    5 Obtendo Ajuda6 Sumrio

  • Introduo

    Ns veremos agora como rodar o tradicional programa 'Ol Mundo' em Python. Isto ensinar a voccomo escrever, salvar e rodar programas no Python.

    H duas formas de usar o Python para rodar um programa - usando o prompt do interpretadorinterativo 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 PATHestiver corretamente configurada.

    Se voc est usando o IDLE, clique em Iniciar Programas Python 3.0 IDLE (PythonGUI).

    Agora digite print('Ol Mundo') e em seguida pressione a tecla Enter. Voc ver as palavrasOl 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 umasimples instruo. Ns usamos print para imprimir qualquer valor que voc fornea. Aqui, nsestamos fornecendo o texto Ol Mundo e este imediatamente impresso na tela.

    Como Sair do InterpretadorPara 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 paraescrever estes arquivos. A escolha de um editor crucial. Voc deve escolher o editor como se vocfosse escolher um carro novo. Um bom editor o ajudar a escrever programas para Pythonfacilmente, fazendo sua jornada mais confortvel e te ajudando a chegar em seu destino (atingindoseu objetivo) de uma forma fcil e segura.

    Uma das necessidades mais bsicas o destaque de sintaxe que torna colorida todas as diferentespartes 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 permiteque voc rode seus programas dentro dele mesmo, alm de fazer outras coisas. Uma observaoespecial: No use o Notepad - uma m escolha pois ele no destaca a sintaxe e tambm no temsuporte a indentao do texto, que muito importante no nosso caso, como veremos adiante. Bonseditores 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 umprogramador experiente, ento voc j deve estar usando Vim ou Emacs. desnecessrio dizer queestes so dois dos mais poderosos editores e que voc ser beneficiado por us-los para escreverseus 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 tertempo 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 - AmbienteIntegrado de Desenvolvimento) como editor. O IDLE instalado por padro com os instaladoresPython para Windows e Mac OS X. Ele tambm est disponvel para instalao em Linux e BSDsnos seus respectivos repositrios.

    Ns exploraremos como usar o IDLE na prxima seo. Para mais detalhes, por favor veja adocumentao do IDLE.

    Se voc ainda deseja explorar outras escolhas para um editor, veja a ampla lista de editores paraPython e faa sua escolha. Voc tambm pode escolher um IDE para Python. Veja a ampla lista deIDEs que suportam Python para mais detalhes. Uma vez que voc passe a escrever grandesprogramas em Python, IDEs podem ser muito teis.

    Eu repito novamente, por favor escolha um editor apropriado - ele pode fazer a elaborao deprogramas em Python mais fcil e divertida.

    Para usurios do VimH uma boa introduo sobre como tornar o Vim um poderoso IDE para Python por John MAnderson.

  • Para usurios do EmacsH uma boa introduo sobre como tornar o Emacs um poderoso IDE para Python por RyanMcGuire.

  • Usando um Arquivo Fonte

    Agora vamos voltar a programao. H uma tradio de que quando voc aprende uma novalinguagem de programao, o primeiro programa que voc escreve e roda o 'Ol Mundo' - tudo queele 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 alinguagem' :) .

    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 seguinteprograma. Ento clique sobre File Save.

    #!/usr/bin/python #Filename: olamundo.pyprint('Ol Mundo')

    Rode este programa abrindo o shell (terminal Linux ou prompt do DOS) e entre com o comandopython 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 programapara Python.

    No caso de um erro, pro favor digite o programa acima exatamente como mostrado e rode oprograma novamente. Note que Python case-sensitive i.e. print no o mesmo que Print - note op minsculo na primeira instruo e o P maisculo na segunda. Alm disso, assegure-se que no hajaespaos 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 oleitor do programa.

    Python no usa os comentrio, exceto para o caso especial da primeira linha. Ela chamada de linhade organizao - sempre que os dois primeiros caracteres do arquivo fonte so #! seguidos pelalocalizao 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 prximaseo. Note que voc sempre pode rodar o programa em qualquer plataforma especificando ointerpretador diretamente na linha de comando, como o comando python olamundo.py .

    ImportanteUse comentrio em seu programa de forma sensata, para explicar algum detalhe importante deseu programa - isto til para que os leitores de seu programa possam entender facilmente oque 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 queapenas imprime o texto 'Ol Mundo'. Ns aprenderemos sobre funes em um captulo posterior, oque voc deve entender agora que o que voc colocar nos parnteses ser impresso na tela. Nestecaso, ns fornecemos 'Ol Mundo' que se refere a uma string - no se preocupe, ns vamos exploraressas terminologias em detalhes mais tarde.

    Programas Executveis em Python

    Isto funciona apenas para usurios Linux/Unix, mas usurios do Windows podem estar curiosos sobrea primeira linha do programa. Inicialmente, devemos dar ao programa a permisso para executarusando 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 permissopara todos ('a'll) os usurio do sistema o executar (e'x'ecute). Ento, ns executamos o programadiretamente especificando a localizao do arquivo fonte. Ns usamos o ./ para indicar que oprograma 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 programausando 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 arquivofonte - mas e se voc desejar rodar o arquivo de qualquer lugar? Voc pode fazer isso armazenandoo programa em um dos diretrios listados na varivel de ambiente PATH. Sempre que voc rodaqualquer programa, o sistema procura por aquele programa em cada diretrio listado na varivel deambiente PATHe ento roda aquele programa. Ns podemos tornar este programa disponvel emqualquer 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 indicarpara o shell que ns precisamos do valor desta varivel. Ns vemos que /home/swaroop/bin umdos diretrios na varivel PATH onde swaroop o nome de usurio que eu estou usando em meusistema. 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 podeser feito rodando PATH=$PATH:/home/swaroop/mydir onde '/home/swaroop/mydir' o diretrioque eu desejo adicionar na varivel PATH.

    Este mtodo muito til se voc deseja escrever scripts teis que voc queira rodar de qualquerlugar, a qualquer hora. como criar seu prprio comando, semelhante ao cd ou qualquer outrocomando que voc use no terminal linux ou no prompt do DOS.

    CuidadoEm 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 afuno embutida help. Isto muito til especialmente quando estiver usando o prompt dointerpretador. Por exemplo, rode help(print) - isto mostra a ajuda para a funo print que usadapara imprimir coisas na tela.

    NotaPressione 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 dentrode aspas como em help('return') dessa forma Python no se confunde com o que ns queremosfazer.

  • 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'

  • FundamentosImprimir '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 usandoconstantes e variveis.

  • Contedo

    1 Constantes Literais2 Nmeros3 Strings

    3.1 Aspas Unitrias3.2 Aspas Duplas3.3 Aspas Triplas3.4 Seqncias de Escape3.5 Strings Brutas3.6 Strings So Imutveis3.7 Concatenao de Literais do Tipo String3.8 O mtodo 'format'

    4 Variveis5 Nomenclatura de Identificadores6 Tipos de Dados7 Objetos

    7.1 Exemplo: Utilizando variveis e constantes literais8 Linhas Lgicas e Fsicas9 Indentao10 Resumo

  • Constantes Literais

    Um exemplo de uma constante literal um nmero como 5, 1.23, 9.25e-3 ou uma string (sequnciade 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 almdisso - 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). Anotao 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 experientesNo h o tipo 'long int' (inteiro longo) em separado. O tipo inteiro padro pode assumirqualquer 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 experientesNo 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

    Vsoc pode especificar as strings usando aspas unitrias (ou apstrofes) tais como 'Use aspasunitrias em mim'. Todos os espaos em branco, isto , espaos e tabulaes so preservados noestado em que se encontram.

    Aspas Duplas

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

    Aspas Triplas

    Voc pode especificar strings que ocupam vrias linhas usando aspas triplas - (""" ou '''). Voc podeusar 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 essastring? Por exemplo, a string What's your name?. Voc no pode escrever 'What's yourname?' porque o Python ficar confuso sobre onde a string comea e onde termina. Logo, voc terque 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 duplasem uma string limitada por aspas duplas. Voc tambm pode inserir a prpria barra invertida usandoa seqncia de escape \\.

    O que fazer se voc quer escrever uma string de duas linhas? Uma soluo usar uma string limitadapor aspas triplas conforme foi ensinado previamente ou voc pode utilizar uma seqncia de escapepara o caracter de nova linha - \n para indicar o incio da nova linha. Eis um exemplo, Essa aprimeira 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 maisteis.

    importante observar que numa string, uma nica barra invertida no fim da linha indica que a stringcontinua 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 asseqncias de escape so manipuladas, ento o que voc precisa escrever uma string brutaprefixando 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 issoparea como algo ruim, no realmente. Ns veremos porque isso no uma limitao nos diversosprogramas que ns analisaremos mais adiante.

    Concatenao de Literais do Tipo String

    Se voc colocar duas strings literais lado a lado, elas so automaticamente concatenadas peloPython. Por exemplo, 'Qual ' 'o seu nome?' automaticamente convertido em "Qual oseu nome?".

    Nota para programadores C/C++No h tipo de dado char (caracter) separado em Python. No existe nenhum motivo real paraisto e eu tenho certeza que voc no esquecer isto.

    Nota para programadores Perl/PHPLembre-se que strings com aspas simples e duplas so a mesma coisa - elas no diferem entre si

    Nota para Usurios de Expresso RegularSempre use strings brutas quando estiver manipulando expresses regulares. Do contrrio, ser

  • necessrio muito uso de caracteres de escape. Por exemplo, referncias a barras invertidaspodem ser feitas como '\\1' ou r'\1'.

    O mtodo 'format'

    As vezes ns iremos querer construir strings de uma outra informao. Isto onde o mtodoformat() til

    #!/usr/bin/python# Filename: str_format.py age = 25name = '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 serchamado de um substituto para estas especificaes correspondendo os argumentos ao mtodoformat.

    Observe que est a primeira vez que usamos {0} e isto corresponde vriavel name que oprimeiro argumento ao mtodo 'format'. Similarmente, a segunda especificao {1} quecorresponde 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 maisdetalhadas como:

    >>> '{0:.3}'.format(1/3) # decimal (.) precision of 3 for float'0.333'>>> '{0:_^11}'.format('hello') # fill with underscores (_) with the text centered (^) to 11 width'___hello___'>>> '{name} wrote {book}'.format(name='Swaroop', book='A Byte of Python') # keyword-based'Swaroop wrote A Byte of Python'

    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 dearmazenar 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 podearmazenar qualquer coisa usando uma varivel. Variveis so apenas partes da memria do seucomputador 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 identificaralgo. 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 ouminsculo ASCII ou caracter Unicode) ou um underscore ('_').O restante do nome do identificador pode consistir de letras (maisculo ASCII ou minsculoASCII 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 andresum _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 bsicosso nmeros e strings, que ns j discutimos. Nos prximos captulos, veremos como criar seusprprios tipos usando classes.

  • Objetos

    Lembre-se de que Python se refere a qualquer coisa usada em um programa como um objeto, emsentido geral. Ao invs de dizer 'o alguma coisa', ns de dizemos 'o objeto'.

    Nota para os usurios de Programao Orientada a ObjetosPython 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 eexecute o programa.

    Como escrever programas em PythonDaqui em diante, o procedimento padro para salvar e executar um programa Python aseguinte:

    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 = 5print(i)i = i + 1print(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 icom o operador de atribuio (=). Esta linha chamada de instruo, pois indica que algo deve serfeito e neste caso, ns estamos conectando o nome da varivel i ao valor 5. Em seguida, imprimimoso 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.

    Da mesma forma, atribumos a string literal para a varivel s e depois a imprimimos.

    Nota para programadores de linguagens estticasAs variveis so usadas simplesmente atribuindo-lhes um valor. Nenhuma declarao ou definiode 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 vcomo uma nica instruo. Python implicitamente assume que cada linha fsica corresponde a umalinha lgica.

    Um exemplo de uma linha lgica uma instruo como print('Hello World') - se este estava emuma 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 maislegvel.

    Se voc quiser especificar mais de uma linha lgica em uma nica linha fsica, ento voc tem queespecificar explicitamente usando um ponto-e-vrgula (;) que indica o fim de uma linha lgica ouinstruo. 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 linhalgica para cada linha fsica. Use mais de uma linha fsica para uma nica linha lgica apenas se alinha lgica for realmente comprida. A ideia evitar o ponto-e-vrgula tanto quanto possvel, umavez 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. Nosreferimos 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 quandoescrevermos 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 paradeterminar o nvel de indentao da linha lgica, o qual por sua vez usado para determinar oagrupamento de instrues

    Isto significa que as instrues que vo juntas devem ter a mesma indentao. Cada conjunto dessasinstrues chamada de bloco. Veremos exemplos de como os blocos so importantes nos captulosseguintes.

    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 asintaxe do programa invlida, isto , o programa no foi escrito direito. O que isso quer dizer quevoc no pode iniciar novos blocos de instrues arbitrariamente (exceto pelo bloco principalpadro que voc vem usando o tempo todo, claro). Casos nos quais voc pode usar novos blocossero detalhados em captulos posteriores, tais como o captulo sobre controle de fluxo.

    Como indentarNo use uma mistura de tabs e espaos para a indentao, pois isso no funcionaadequadamente em diferentes plataformas. Eu recomendo fortemente que voc use um nico tabou quatro espaos para cada nvel de indentao.Escolha qualquer um desses dois estilos de indentao. Mais importante, escolha um e useconsistentemente, isto , use somente aquele estilo de indentao.

    Nota para programadores de linguagens estticasPython 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 comodeclaraes de controle de fluxo. Certifique-se de que voc Certifique-se de que voc j estconfortvel com o que voc leu nesse captulo.

  • Operadores e Expresses

  • Contedo

    1 Introduo2 Operadores3 Precendncia de Operadores4 Ordem de avaliao5 Associatividade6 Expresses

    6.1 Usando Expresses7 Sumrio

  • Introduo

    A maioria das instrues (linhas lgicas) que voc escrever iro conter expresses. Um exemplosimples 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 + oupor palavras-chave especiais. Operadores requerem dados para funcionar e tais dados so chamadosoperandos. 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 + 35>>> 3 * 515>>>

    Operadores e sua utilizao

    Operador Nome Explicao Exemplos

    + Adio Soma dois objetos 3 + 5 retorna 8. 'a' + 'b' retorna 'ab'.

    - SubtraoTorna um nmeronegativo ou a subtraode um nmero por outro

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

    * Multiplicao

    Retorna o produto dedois nmeros ou umastring repetida uma certaquantidade 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.

    // DivisoInteiraRetorna a parte inteira doquociente 4 // 3 retorna 1.

    % Modulo Retorna o resto dadiviso 8 % 3 retorna 2. -25.5 % 2.25 retorna 1.5.

  • Deslocamentode bits direita

    Desloca os bits donmero para a direitapelo nmero de bitsespecificado.

    11 >> 1 retorna 5. 11 representado em bitspor 1011 que quando os bits so deslocadospara a direita por 1 bit retorna 101, que onmero decimal 5.

    & sOperador bita bit AND

    Bits configurados nosdois operadores soconfigurados noresultado

    5 & 3 retorna 1.

    | Operador bita bit OR

    Bits configurados em umou outro operador soconfigurados noresultado

    5 | 3 retorna 7

    ^ Operador bita bit XOR

    Bits configurados em umou outro operador, masno em ambos, soconfigurados noresultado

    5 ^ 3 retorna 6

    ~ Operador bita bit NOT

    Bits configurados nooperador no soconfigurados noresultado e vice-versa.

    ~5 retorna -6.

    < Menor que

    Retorna se x menor quey. Todos os operadoresde comparo retornamTrue(verdadeiro) ou

    5 < 3 retorna False e 3 < 5 retorna True.

    Comparaes podem ser encadeadas

  • False(falso). Note acapitalizao dos nomes.

    arbitrariamente: 3 < 5 < 7 retorna True.

    > Maior que Retorna se x maior quey

    5 > 3 retorna True. Se os dois operadoresforem nmeros, eles so antes convertidos a umtipo comum. De outra maneira, ser sempreretornado False.

    = 3 retorna True.

    == Igual a Compara se os objetosso iguais

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

    x = 'str'; y = 'stR'; x == y retornaFalse.

    x = 'str'; y = 'str'; x == y retornaTrue.

    != Diferente de Compara se os objetosso diferentes x = 2; y = 3; x != y retorna True.

    notOperadorbooleanoNOT

    Se x True, ele retornaFalse. Se x False, eleretorna True.

    x = True; not y retorna False.

    andOperadorbooleanoAND

    x and y retorna Falsese x False, seno eleretorna a avaliao de y

    x = False; y = True; x and y retornaFalse desde que x seja False. Neste caso,Python no ir avaliar y desde que ele saibaque o lado esquerdo da espresso 'and' Falseo que implica que toda a espresso ser Falseindependente do outro valor. isso chamadoshort-circuit evaluation.

  • or Operadorbooleano OR

    Se x True, ele retornaTrue, seno ele retorna aavaliao de y

    x = True; y = False; x or y retornaTrue. A Short-circuit evaluation se aplica aquitambm.

  • 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. Issosignifica 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 menorprecedncia (least binding) ao de maior precedncia (most binding). Isto significa que em uma dadaexpresso, Python ir primeiramente avaliar os operadores listados na base da tabela antes dosoperadores listados ao topo.

    A tabela a seguir (tirada de Manual de referncia Python) proporcionada visando maiorentendimento. muito melhor usar parnteses para agrupar operadores e operandos apropriadamentede maneira que fique clara a precedncia. Isso torna o programa mais legvel. Veja #Ordem deAvaliao 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 sOperador 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 deprecedncia 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. Porexemplo, se voc quer que a adio seja realizada antes da multiplicao em uma expresso, entovoc pode escrever algo como (2 + 3) * 4.

  • Associatividade

    Operadores so, geralmente, associados da esquerda para a direita, isto , operadores com a mesmaprocedncia 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 aesquerda, isto , a = b = c tratado como a = (b = c).

  • Expresses

    Usando Expresses

    Exemplo:

    #!/usr/bin/python# Nome do Arquivo: expressao.py length = 5breadth = 2 area = length * breadthprint('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 osutilizamos para calcular a rea e o permetro do retngulo com a ajuda de expresses. Armazenamoso resultado da expresso length * breadth na varivel area e ento o imprimimos usando afuno 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 notenhamos especificao um espao entre 'rea ' e a varivel area, Python coloca-o para ns de umamaneira 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 bsicosde qualquer programa. A seguir, veremos como fazer uso deles em nossos programas atravs deindicao.

  • Controle de Fluxo

  • Contedo

    1 Introduo2 A instruo IF3 A instruo while4 O loop for5 A instruo break

    5.1 Python Potico do Swaroop6 A Instruo continue7 Sumrio

  • Introduo

    Nos programas que vimos at agora, houveram uma srie de declaraes e o Python executa-os namesma ordem. E se voc quisesse alterar o fluxo de seu funcionamento? Por exemplo, voc quer queo 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 umbloco de instrues (chamado de bloco-if(if-block)), seno ser processado outro bloco deinstrues (chamado de bloco-else(else-block)). A clusula else opcional.

    Exemplo:

    #!/usr/bin/python# Nome do aquivo: if.py number = 23guess = 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 aquielif 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 aonmero 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 peasde 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 entradado 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 inteirousando int e depois armazenamos na varivel guess. Na verdade, o int uma classe, mas tudo oque 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 elesforem iguais, imprimimos uma mensagem de sucesso. Note que utilizamos nveis de indentaoparadizer ao Python que instrues pertencem a qual bloco. pos isso que a indentao to importanteno 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 aseguir 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 oinserido. 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 fcile reduz quantidade de indentaes requeridas.

    As instrues elif else devem, tambm, possuir 'dois pontos' no final da linha lgica, seguido peloseu 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 eelse 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 devenotar em programas assim. Todas elas so bem avanadas (e surpreendentemente simples para todosvocs 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 parafazer 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 umacondio for verdadeira. Uma instruo while um exemplo do que chamado de instruo delooping. Uma instruo while pode ter uma clusula else opcional.

    Exemplo:

    #!/usr/bin/python# Nome do arquivo: while.py number = 23running = 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 usuriopode continuar tentando advinhar at que ele acerte o nmero - no ha necessidade de rodarnovamente o programa para cada tentativa de adivinhao, como fizemos na seo anterior. Istodemonstra 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) eento seguimos para executar executar o bloco while correspondente.Depois que o bloco executado, a condio novamente checada que neste caso a varivelrunning. Se isso verdade, ns executamos o bloco while novamente, seno continuamos paraexecutar 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 atser 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 sairsequer 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 mesmobloco (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, porexemplo, percorre cada item em uma sequncia. Iremos ver mais sobre sequncias em detalhes emcaptlos posteriores. O que voc precisa saber agora que uma sequncia apenas uma coleoordenada 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 denmeros usando a funo interna range.

    O que fazemos fornecer dois nmeros e range retorna uma sequncia de nmeros iniciando doprimeiro 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 nmeropara 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, eento executar o bloco de instries para cada valor de i. Neste caso, ns apenas imprimimos ovalor no bloco de instrues.

    Lembre-se que a parte else opcional. Quando includa, ela ser sempre executada uma vez aps oloop 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 nmerosgerados 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 foreachem 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 vocescreve apenas for i in range(0,5). Como voc pode ver, o loop for mais simples, maisexpressivo 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 umainstruo de loop, mesmo que a condio no tenha se tornado False ou a sequncia de itens tenhasido iterada completamente.

    Uma informao importante que se voc quebra um loop for ou while, qualquer bloco elsecorrespondente 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: use Python! Tamanho da string 12 Entre com alguma coisa: sair Feito

    Como funciona:

    Neste programa, ns recebemos os dados de entrada do usurio repetidamente e imprimimos otamanho de cada entrada toda vez. Estamos provendo uma condio especial para parar o programaverificando se a entrada do usurio 'sair'. Paramos o programa combreak, 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 doSwaroop:

    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 loopcorrente 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 pelomenos 3 caracteres. Ento, utilizamos a funo interna len para pegar o tamanho e se este for menorque 3, pulamos o resto das instrues no bloco utilizando a instruo continue. Seno, o resto dasinstrues no loop so executadas e poderemos fazer qualquer tipo de processamento que quiser-mosaqui.

    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 comsuas instrues break e continue associadas. Estas so algumas das partes mais utilizadas doPython e outras, tornar-se confortvel com elas essencial.

  • Funes

  • Contedo

    1 Introduo2 Parmetros da Funo3 Variveis Locais4 Usando o comando global5 Usando o comando nonlocal6 Valores padro de argumentos7 Argumentos Nomeados8 Parmetros VarArgs9 Parmetros apenas por palavra-chave10 O comando return11 DocStrings12 Anotaes13 Sumrio

  • Introduo

    Funes so pedaos reutilizveis de programas. Elas permitem dar um nome para um bloco decdigo 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 programano-trivial (em qualquer linguagem de programao), portanto vamos explorar vrios aspectos dasfunes 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 doispontos ao final da linha. Em seguida o bloco de cdigo que faz parte desta funo. Um exemploabaixo 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 funodigaOla() # 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 norecebe parmetros e conseqentemente no h variveis declaradas entre parnteses. Para asfunes, parmetros so somente uma entrada que podemos passar diferentes valores e receberresultados correspondentes.

    Repare que podemos chamar a mesma funo duas vezes, o que significa que no temos que escrevero mesmo cdigo de novo.

  • Parmetros da Funo

    Uma funo pode receber parmetros, que so valores fornecidos funo para que a mesma possafazer algo til com os mesmos. Estes parmetros so como variveis, exceto que os valores destasvariveis 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 porvrgulas. Quando chamamos a funo, passamos os valores da mesma maneira. Note a terminologiautilizada - os nomes dados na definio da funo so chamados de parmetros enquanto que osvalores que fornecemos na chamada da funo so chamados de argusmentos.

    Exemplo:

    #!/usr/bin/python# Filename: func_param.py def printMax(a, b): if a > b: print(a, 'is maximum') else: print(b, 'is maximum') printMax(3, 4) # valores literais passados para a funo x = 5y = 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 maiornmero.

    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 sejaatribudo ao parmetro a e o valor do argumento y atribudo ao parmetro b. A funo printMaxfunciona da mesma maneira em ambos os casos.

  • Variveis Locais

    Quando voc declara variveis dentro de uma definio de funo, elas no esto relacionadas deforma alguma com outras variveis com os mesmos nomes usados fora da funo, ou seja, variveislocais em relao funo. Isto o que se chama de escopo da varivel. Todas as variveis tm oescopo 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 = 50func(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 parmetrosdeclarado na funo.

    Em seguida, atribumos o valor 2 a x. O nome x local nossa funo. Ento, quando mudamos ovalor 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 dequalquer tipo de escopo tal como funes ou classes, ento voc tem que dizer ao Python que o nomeno local, mas sim global. Fazemos isso usando o comando global. impossvel atribuir um valora 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 hajanenhuma varivel com o mesmo nome dentro da funo. No entanto, isso no recomendado e deveser 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 = 50func()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 atribuirum valor a x dentro da funo, essa mudana refletida quando usamos o valor de x no blocoprincipal.

    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 escopochamado "nonlocal", que um meio termo entre esses dois tipos de escopo. Escopos nonlocalocorrem 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 meiode 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 decomportamento nesses dois casos.

  • Valores padro de argumentos

    Para algumas funes, voc pode querer que alguns dos seus parmetros sejam opcionais e usarvalores 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 deargumentos para parmetros colocando o operador de atribuio (=) aps o nome do parmetro nadefinio da funo, seguifo pelo valor padro.

    Note que o valor do argumento padro dever ser uma constante. Mais precisamente, o valor doargumento padro deve ser imutvel. Isso explicado em detalhes nos captulos seguintes. Porenquanto, 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 nofornecemos um valor, ento, por padro, a string impressa apenas uma vez. Conseguimos issoespecificando 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 desay, fornecemos tanto a string quanto o argumento 5 5 determinando que queremos dizer a mensagem5 vezes.

    ImportanteApenas os parmetros que estiverem no final da lista de parmetros podem receber valorespadro de argumento, ou seja, voc no pode ter um parmetro com valor de argumento padroantes de um parmetro sem um valor de argumento padro na ordem dos parmetros declaradosna lista de parmetros da funo.O motivo que os valores so atribudos aos parmetros por posio. Por exemplo, deffunc(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 podepassar 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) paraespecificar os argumentos para a funo.

    Existem duas vantagens nessa abordagem: primeiro, mais fcil usar a funo, uma vez que noprecisamos nos preocupar com a ordem dos argumentos. Segundo, podemos dar valores apenas paraos 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 doisparmetros 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 crecebe 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. Avarivel b fica com o valor padro de 5.

    No terceiro uso func(c=50, a=100), utilizamos somente argumentos nomeados para especificar osvalores. Note que estamos especificando o valor para o parmetro c antes do valor do parmetro aainda que a tenha sido definido antes de c na definio da funo.

  • Parmetros VarArgs

    TODODevo escrever sobre este assunto num captulo posterior, uma vez que ainda no falamos sobrelistas 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 osargumentos 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 armazenadosem 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 porpalavra-chave e no como argumentos posicionais, estes pode ser declarados aps um parmetromarcado 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 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 porpalavra-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 marcadocom asterisco, ento simplesmente use um asterisco sem qualquer nome, tal como deftotal(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 fornecidospara a funo. Ela usa um simples comando if..else para encontrar o maior valor e retorna essevalor.

    Note que um comando return sem um valor equivalente a return None. None um tipo especialem Python que representa um valor nulo. Por exemplo, usado para indicar que uma varivel nopossui nenhum valor quando tem o valor None.

    Cada funo implicitamente contm um comando return None no final, a menos que voc tenhaescrito seu seu prprio comando return. Voc pode confirmar isso executando a printsomeFunction() 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.

    NotaExiste uma funo embutida chamada max que j implementa a funcionalidade 'encontrarmximo'. Portanto, use esta funo sempre que possvel.

  • DocStrings

    Python possui um recurso chamado strings de documentao, usualmente conhecidas pelo seu nomemais curto, docstrings. DocStrings so uma ferramenta importante da qual voc deve fazer uso, umavez que ela ajuda a documentar o programa e o torna mais fcil de entender. Python has a nifty featurecalled documentation strings, usually referred to by its shorter name docstrings. DocStrings are animportant tool that you should make use of since it helps to document the program better and makes itmore easy to understand. Surpreendentemente, podemos at obter a docstring de, digamos, umafuno, 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 quedocstrings tambm se aplicam a mdulos e classes, que vamos aprender sobre nos respectivoscaptulos.

    A conveno seguida para um docstring uma string de mltiplas linhas onde a primeira linhacomea com uma letra maiscula e termina com um ponto. Em seguida, a segunda linha fica embranco, seguida de uma explicao detalhada a partir da terceira linha. fortemente recomendadoque 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 incluifunes. 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 apenasbuscar o atributo __doc__ dessa funo e o exibir para voc de uma forma elegante. Voc podeexperiment-lo na funo acima - basta incluir help(printMax) no seu programa. Lembre-se depressionar 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 quevoc escreva. O comando pydoc que vem com sua distribuio Python funciona de forma semelhantea help() usando docstrings.

  • Anotaes

    Funes possuem outra funcionalidade avanada chamada anotaes, que so um modo estiloso deanexar informao adicional para cada um dos parmetros e tambm para o valor de retorno. Como ointerpretador Python no interpreta estas anotaes (tal funcionalidade responsabilidade debibliotecas de terceiros), pularemos esta funcionalidade desta discusso. Se voc est interessadoem 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.

    s

  • Mdulos

  • Contedo

    1 Introduo2 Arquivos .pyc Byte-compilados3 O Comando from .. import4 O __name__ de um Mdulo5 Produzindo os Seus Prprios Mdulos6 A Funo dir7 Packages8 Resumo

  • Introduo

    Voc viu como pode reutilizar cdigos em seu programa atravs da definio apenas uma vez defunes. Que tal se voc quisesse reutilizar um certo nmero de funes em outros programas quevoc 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 utilizaros 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 emns dizermos a Python que queremos empregar este mdulo. O mdulo sys contm funcionalidaderelacionada 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 diretrioslistados 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 dessaabordagem 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 captuloposterior). 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 formade 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 omdulo using_sys.py com o comando python e as outras coisas que seguem so argumentospassados ao programa. Python guarda os argumentos da linha de comando na varivel sys.argv paranosso uso.

    Lembre-se, o nome do script que est em execuo sempre o primeiro argumento na listasys.argv. assim, neste caso ns teremos 'using_sys.py' como sys.argv[0], 'nos' comosys.argv[1], 'somos' como sys.argv[2] e 'argumentos' como sys.argv[3]. Note que Pythoncomea 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 diret