Você está na página 1de 31

Gustavo Noronha Silva

Curso de Python

Forum Mineiro de Software Livre

Montes Claros setembro/2003

Sumrio a

Nota de Copyright Agradecimentos 1 Introduo ca 2 Reviso de Conceitos a 2.1 Linguagem Interpretada vs Compilada . . . . . . . . . . . . . . . . . . 2.2 Tipagem Forte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 6 p. 7 p. 7 p. 7 p. 8 p. 9 p. 9 p. 10 p. 11 p. 11 p. 12 p. 12 p. 15 p. 16 p. 19 p. 22 . . . . . . . . . . . . . . . . . . . . . . . . . p. 22

2.3 Orientaao a Objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . c 3 Mo na massa! a 3.1 O Interpretador Python . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Mdulos, as bibliotecas do Python . . . . . . . . . . . . . . . . . . . . . o 3.3 Se virando no Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1 3.3.2 3.3.3 A funao dir() . . . . . . . . . . . . . . . . . . . . . . . . . . . . c PyDoc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nosso amigo help() . . . . . . . . . . . . . . . . . . . . . . . . .

3.4 Variveis e mais sintaxe bsica . . . . . . . . . . . . . . . . . . . . . . . a a 3.5 Condioes e Estruturas de Repetiao . . . . . . . . . . . . . . . . . . . c c 3.6 Usando um editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Tipos de Dados 4.1 Inteiros e Ponto utuante

4.2 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Listas e Tuplas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4 Dicionrios a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 22 p. 23 p. 25 p. 25 p. 27 p. 27 p. 27 p. 28 p. 28 p. 30 p. 30 p. 31 p. 31 p. 33

4.5 Converso / Casting . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 5 Funoes c 5.1 Sintaxe Bsica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 5.2 Passagem Avanada de Argumentos . . . . . . . . . . . . . . . . . . . . c 5.3 Retorno da funao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c 5.4 Documentando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Classes 6.1 Criando estruturas em Python . . . . . . . . . . . . . . . . . . . . . . . 6.2 Mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 6.3 Herana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c 7 Arquivos / IO

Nota de Copyright

Copyright ( c ) 2003, Gustavo Noronha Silva <kov@debian.org> Esse curso est licenciado sob a GNU FDL (Free Documentation License), fornecida pela a Free Software Foundation.

Agradecimentos

Muito obrigado a Allan Douglas <allan douglas@gmx.net> pela grande ajuda na escrita desse curso.

Introduao c

A programaao nos dias atuais est centrada em uma briga de gigantes que pretendem c a impr seus padres para substituir a linguagem conhecida como padro da ind stria, o o a u C++. Correndo por fora esto linguagens relativamente pouco conhecidas e aclamadas, tala vez por serem fruto do esforo de grandes mestres da computaao (como as primeiras c c linguagens) e no por grandes empresas. a Python uma dessas linguagens e traz uma simplicidade indiscut e vel, ao mesmo tempo em que, apesar de ser uma linguagem interpretada, extremamente veloz. e Aqueles que j programam h tempos com linguagens cheias de controle sinttico vo a a a a certamente se sentir perdidos num primeiro contato, mas percebero que Python se adapta a muito bem ao modelo mental do programador e vai se sentir falando com a mquina em a pouco tempo.

Reviso de Conceitos a

Python uma linguagem simples, mas constru em uma base terica e tcnica e e da o e muito complexa. Ela eleva a orientaao a objetos, em alguns casos, ao extremo. c Vamos dar uma revisada em alguns conceitos importantes que nos subsidiaro no a aprendizado de Python.

2.1

Linguagem Interpretada vs Compilada

Python, como j foi dito, uma linguagem interpretada, como Perl, Shell Script, a e Batch Scripts, entre outras. Isso signica que no necessria a compilaao do cdigo a e a c o para que ele seja executado e isso trs vrias vantagens e desvantagens embutidas. a a Linguagens compiladas normalmente so mais rpidas, porque o cdigo j est num a a o a a formato que o computador entende. Linguagens interpretadas costumam funcionar de uma ou outra maneira: Compilaao Just-In-Time c Interpretaao pura ou em Bytecode c O Python pode funcionar das duas formas. Vamos usar mais o segundo modelo durante o curso, mas no se esquea de conferir o compilador JIT do Python. a c

2.2

Tipagem Forte

Python uma linguagem de tipagem forte. Isso signica que se uma varivel adquire e a um determinado tipo no deixa mais de ser daquele tipo a menos que seja recriada. Isso a o torna diferente de um script Shell, por exemplo, em que nunca se sabe o tipo exato de uma varivel. a

Apesar da sua tipagem ser forte, a declaraao de variveis no necessria e a simples c a a e a atribuiao de um valor serve para criar ou recriar uma varivel. Leve isso em conta quando c a programar. Tome muito cuidado com os nomes das variveis. a

2.3

Orientao a Objeto ca

Dou uma nfase especial a esse conceito, pois j vi muita gente dizer que uma linguae a gem orientada a objetos porque voc pode criar interfaces grcas 1 . No tem nada a e e a a ver. Uma linguagem orientada a objetos coloca como centro nervoso do programa um ou mais objetos de determinada classe, ao contrrio das linguagens estruturadas, em que o a processo, ou as estruturas de dados so o centro e voc chama funoes que atuam sobre a e c esses elementos. Isso no signica, claro, que no se pode criar aplicaoes com interfaces grcas com a e a c a Python ou com qualquer outra linguagem orientada ou no a objetos. a Python uma linguagem orientada a objetos, e nela quase tudo um objeto. At e e e mesmo as variveis que representam os tipos mais bsicos, como inteiro e caractere so a a a objetos, tm seus mtodos e propriedades. e e

Outro conceito extremamente errado e muito difundido que C para aplicaoes comuns e C++ e e c para interfaces grcas. Talvez seja exatamente uma derivaao do conceito errado que eu cito aqui, j a c a que C++ orientada a objetos e C no. e a

Mo na massa! a

Vamos ento comear! A primeira coisa a fazer nos familiarizarmos com o interprea c e tador Python, que pode nos ser muito util a qualquer momento. Veremos como descobrir informaoes sobre um determinado elemento e como usar o interpretador para testarmos c pequenos trechos de cdigo. o

3.1

O Interpretador Python

O interpretador o programa que executa cdigo Python. Para execut-lo basta abrir e o a um terminal e digitar python. Voc ver algo desse tipo: e a

O que vemos nas trs primeiras linhas a apresentaao do interpretador. Ele est e e c a dizendo oi! =D. Basicamente ele informa de que verso do Python se trata, com que a compilador foi compilado e sugere algumas chamadas bsicas caso tenha problemas ou a d vidas. u

10

O >>> o prompt do interpretador. Podemos sair programando em Python agora e mesmo. O interpretador vai executar o cdigo que escrevermos na hora, e poderemos ver o o resultado. J que o interpretador nos disse oi no sejamos mal-educados, vamos responder a a a ele, digitando o seguinte: >>> print Ol, Python! a Ol, Python! a Otimo! Podemos ver que print serve para mostrar mensagens na tela. Voc pode e usar aspas simples ou duplas para delimitar a mensagem. A funao print uma excesso c e a entre as funoes do Python, j que ela no precisa de parenteses. Note, tambm, que no c a a e a h um caractere delimitador da chamada (como ; em C e Pascal). a

3.2

Mdulos, as bibliotecas do Python o

No Python chamamos as coleoes de cdigo que fornecem extenses para a linguagem c o o de mdulos. Pode-se fazer uma associaao as bibliotecas usadas em C (e, na verdade, o c ` algumas vezes os mdulos so bibliotecas). Para us-los, temos que import-los. Mas o a a a cuidado com a balana comercial, hein! (duh) c O Python procura sempre proteger o chamado espao de nomes e, portanto, sempre c que voc importar um mdulo ter de usar seu nome para chamar funoes e acessar e o a c propriedades que esto dentro dele. Isso pode ser familiar para quem lida com Java ou a C#. Vejamos as trs formas de importar mdulos: e o >>> import os >>> os.getcwd () /home/kov >>> from os import getcwd >>> getcwd () /home/kov >>> from os import * >>> getcwd () /home/kov

11

A primeira, import os, importa o mdulo como um todo, mas exige que sempre que o voc quiser acessar algo que pertence ao mdulo voc tenha que adicionar os. antes da e o e funao ou propriedade. O segundo, from os import getcwd, importa somente aquela c funao determinada; isso pode usar menos memria e no mais necessrio usar os. c o a e a antes de chamar a funao; a terceira forma como a segunda, mas ao invs de importar c e e uma s funao, importa todas. o c

3.3

Se virando no Python

Este documento no pretende ser uma referncia completa sobre o Python. Ento, a e a como obter ajuda? Como descobrir quais so as funcionalidades presentes nesta linguaa gem? Como se virar?

3.3.1

A funo dir() ca

O Python tem uma funao chamada dir(). Ela fornece a linguagem a capacidade de c ` reexo, presente em linguagens como Java. Isso signica que voc pode listar o conte do a e u de mdulos e qualquer outro tipo de objeto1 . Isso ajuda a saber sobre o que queremos o ajuda, por exemplo. Vamos ver como funciona: >>> dir (__builtins__) (...) reduce, reload, str, repr, sum, round, setattr, type, slice, unichr, staticmethod, >>> import sys >>> dir (sys) (...) prefix, ps1, ps2, setcheckinterval, settrace, setdlopenflags, stderr, stdin, setprofile, setrecursionlimit, super, tuple,

unicode, vars, xrange, zip]

stdout, version, version_info, warnoptions] >>> dir("umastring") (...) rip,


1

replace,

rfind,

rindex,

rjust,

rstrip,

split,

Mdulos so objetos, depois de importados, e quase tudo em Python um objeto, at uma string! o a e e

12

splitlines, startswith, strip, swapcase, title, translate, upper, zfill] Isso signica que o espao de nomes c qualquer string. builtins , carrega aquelas funoes ou propriec

dades2 , que o mdulo sys tem aquelas listadas, e que voc pode usar aqueles mtodos em o e e

3.3.2

PyDoc

pydoc um software que acompanha a distribuiao ocial do Python. Ele permite e c acesso a documentaao presente nas docstrings 3 dos objetos. ` c H vrios modos de utiliza-lo, um dos mais uteis chamando-o para que monte um a a e pequeno servidor HTTP. Digite em um terminal: $ pydoc -p 1234 pydoc server ready at http://localhost:1234/ Ele criar um servidor que pode ser acessado pelo endereo http://localhost:1234. A a c pgina produzida automaticamente, e lista os mdulos Python instalados. Clicando-se a e o em um dos mdulos pode-se visualizar quais so a funoes (mtodos) dispon o a c e veis, sua sintaxe e tambm uma breve descriao. e c

3.3.3

Nosso amigo help()

O interpretador Python oferece um mecanismo de ajuda simples e eciente. Ele prov e uma funao help(), que permite acessar parte da documentaao ocial Python e o PyDoc. c c Ele poder ser chamado para uma sesso interativa: a a >>> help() (Apresentaao) c~ help> help> o prompt do help. Tudo o que voc digitar a partir de agora, ser interpretado e e a pelo help. Digite quit para sair. Para visualizar a documentaao docstring de um mdulo, c o basta digitar o nome do mdulo: o
Uma propriedade, normalmente, uma varivel. e a As docstrings so textos inclu a dos no in da deniao de uma classe ou funao documentando-as. cio c c Veja mais detalhes na seao 5.4 do cap c tulo sobre Funoes, pgina 28. c a
3 2

13

help> os Help on module os: NAME os - OS routines for Mac, DOS, NT, or Posix depending on what system were on. (...) Use as setas do teclado para ir para baixo/cima e aperte q para sair. Para saber quais so os modulos dispon a veis, digite modules: help> modules Please wait a moment while I gather a list of all available modules... ArrayPrinter BaseHTTPServer Bastion CDROM (...) Para procurar um mdulo por palavra-chave, digite module palavra e o help retornar o a uma lista de modulos que correspondem aquela palavra. ` Alm da documentaao dos mdulos, o help permite que voc obtenha ajuda em e c o e determinados tpicos. Os assuntos so variados, vo desde a descriao dos tipos bsicos o a a c a at como fazer o debugging de um programa. Digite topics para ver quais so os topicos e a dispon veis. Esqueceu qual a sintaxe do if ou de outra palavra-chave? No tema! O help tambm a e oferece um rpido acesso a gramtica das palavras-chave, com uma breve descriao de seu a ` a c uso. No help, digite keywords para saber quais so as palavras-chaves. E para acessar a sua documentaao, s digitar o nome: c e o help> if 7.1 The if statement asyncore atexit audiodev audioop linuxaudiodev locale logging (package) macpath sgmllib sha shelve shlex

14

The if statement is used for conditional execution: if_stmt ::= "if" expression[1] ":" suite[2] ( "elif" expression[3] ":" suite[4] )* ["else" ":" suite[5]] (...) O help() pode ser chamado fora de um sesso interativa. Para obter a documentaao a c de um mdulo ou funao, necessrio, primeiramente, import-lo: o c e a a >>> import os >>> help(os.open) Help on built-in function open: open(...) open(filename, flag [, mode=0777]) -> fd Open a file (for low level IO). Para acessar a ajuda das palavras-chaves e dos tpicos, preciso chamar o help delio e mitando o nome do tpico ou palavra-chave com aspas: o >>> help(TRUTHVALUE) 2.2.1 Truth Value Testing Any object can be tested for truth value, for use in an if or while condition or as operand of the Boolean operations below. The following values are considered false: (...)

3.4

Variveis e mais sintaxe bsica a a

Vamos continuar usando o interpretador. Agora vamos ver um pouco sobre variveis. a Variveis so estruturas simples que servem para guardar dados. Como eu j disse, no a a a a e necessrio declarar variveis em Python. Vamos dar uma olhada ento: a a a

15

>>> variavel = 1 >>> print variavel 1 >>> variavel 1 A primeira linha coloca 1 na varivel de nome variavel. A segunda linha mostra a variavel na tela e a terceira retorna o valor de variavel. E muito importante fazer distinao c entre essas duas ultimas. Um programador deve saber que normalmente toda armaao que feita em um c e programa , na verdade, uma expresso, na maioria das linguagens. Em Python, sempre. e a Sempre existe uma avaliaao do valor e um retorno do valor. O sentido prtico disso c a e que o segundo 1 no seria realmente mostrado na tela em um programa de verdade, ele a seria retornado para nada. As operaoes com n meros so feitas como em outras linguagens: c u a >>> soma = 1 + 1 >>> print soma 2 >>> mult = soma * 3 >>> print mult 6 J que estamos lidando com variveis, vamos ver como usar o print para coisas mais a a complexas. Vamos mostrar variveis com ele. Existem vrias formas. Observe: a a >>> soma = 2 + 2 >>> print "A soma e: " + str(soma) A soma e: 4 >>> print "A soma e, na verdade: %d" % (soma) A soma e, na verdade: 4 A primeira forma deve ser comum a quem programa em VB ou PHP, por exemplo. A segunda deve causar boas lembranas aos programadores de C =). Eu, particularmente, c prero a segunda forma, mas a primeira nos ensina duas coisas importantes: 1) poss e vel

16

somar strings (e, veremos mais a frente, outros tipos de dados, tambm!) e 2) os tipos e em Python so fortes, voc tem que converter o inteiro para string se quiser concatenar a e os dois. Vamos analizar melhor a segunda. Entre aspas temos o que chamamos de formato, que a deniao do que aparecer na tela. A string %d signica que ali ser colocado e c a a um inteiro. Depois do formato colocamos um separador (um %) e, entre parnteses e uma lista separada por v rgulas, das variveis que queremos que substituam os cdigos. a o Vamos ver mais um exemplo: >>> meunome="Gustavo" >>> minhaidade=20 >>> print "Oi, eu sou %s e tenho %d anos!" % (meunome, minhaidade) Oi, eu sou Gustavo e tenho 20 anos!

3.5

Condioes e Estruturas de Repetio c ca

Anets de comearmos a seao propriamente dita, necessrio entender como o Python c c e a marca o in e o nal de blocos. Aqueles acostumados com C e Pascal estaro acostucio a mados com coisas do tipo: if (variavel == 10) { printf (" 10!!!\n"); E } Ou if (variavel = 10) then begin writeln (" 10!!!"); E end; O Python, para o desgosto de alguns, no tem estruturas sintticas de abertura e a a fechamento de blocos. O Python usa a indentaao para denir o in c cio e trmino de e blocos. O problema aqui que muitos programadores no tm hbito de fazer uma e a e a

17

indentaao consistente. A vantagem do Python que ele obriga o programador a ter uma c e indentaao consistente. =) c Portanto, para comear um bloco de condiao, necessrio um n de indentaao. c c e a vel c Para indentar, pressione a tecla tab. Um exemplo: >>> variavel = 10 >>> if variavel == 10: ... print "E 10!!" ... 10!! E Duas coisas importantes a serem observadas: 1) quando o Python espera que voc e inicie um bloco, o interpretador muda o prompt para ... e 2) para mostrar que um bloco acabou (no interpretador) basta dar enter sem indentar uma linha depois de ter escrito seu bloco. Num programa de verdade no necessrio adicionar uma linha em branco a e a para terminar um bloco, basta no indentar a linha seguinte. Ns veremos isso melhor a o mais a frente. Outra coisa importante: como eu disse inicialmente, no Python toda armativa uma expresso. Mas, diferentemente do C, o Python no aceita atribuioes em cone a a c textos que devem ser somente usados para expresses de condiao. Por exemplo, como o c vimos, o Python usa o operador == para comparaoes. Se eu zer if variavel = 10 o c interpretador ir emitir um erro, porque atribuioes no so permitidas em um if. a c a a Voc pode fazer testes de condiao mais complexos com Python, tambm: e c e >>> a = 2 >>> b = 6 >>> if variavel == 10 and a == 2: ... ... ... ... aaa print "aaa" print "bbb" print "ccc" ... elif b == 6: ... else:

18

Outros operadores podem ser usados, como or para relaao entre comparaoes, e c c ! =, <, >, <= e assim por diante, para relaao entre variveis e valores. c a Um loop for (para) em Python se parece muito com o estilo Pascal de for. Ele exige um tipo de dado mais complexo, que ns veremos mais para frente, que a lista. Mas o e por enquanto vamos ver o bsico do for: a >>> for contador in range (0, 3): ... ... 0 1 2 A funao range serve para retornar uma lista que contenha o intervalo dado pelos c n meros especicados. Preste muita atenao. O primeiro n mero que voc especicar u c u e sempre entra no intervalo, o ultimo nunca. Em matemtica poder a amos representar isso assim: [0, 3[. Um while segue, essencialmente a mesma lgica de qualquer outro while que eu j vi: o a >>> contador = 3 >>> while contador > 0: ... ... ... Python! Python! Python! print "Python!" contador = contador - 1 print contador

3.6

Usando um editor

Sim! Vamos parar de usar o interpretador diretamente para criar nossos cdigos e o vamos passar para um editor, o que nos permitir salvar nossos programas. Isso no a a signica que vamos esquecer o interpretador daqui para frente: muito pelo contrrio! O a interpretador vai ser quem rodar, efetivamente, o programa criado, e tambm o usaremos a e para obter ajuda e testar pequenos pedaos de cdigo enquanto programamos. c o

19

Podemos usar qualquer editor que seja capaz de salvar texto puro. Isso signica qualquer editor, provavelmente. Muitas pessoas tm a idia errada de que necessrio um e e e a programa espec co para programar. Muitas pessoas tambm cometem o erro de chamar e esses programas de compiladores. Na verdade esses programas so chamados IDEs a (Integrated Development Environmet). H diversos IDEs para Python e ns conhecerea o mos um mais a frente. No entanto, por agora, vamos escolher qualquer editor simples e ` comear! c Algumas convenoes para as quais devemos atentar: os arquivos executveis Python c a normalmente no tm extenso, para manter a coerncia com o resto do sistema. Os que a e a e tm usam .py como extenso. Os arquivos podem ser byte-compilados4 e, nesse caso, e a recebero a extenso .pyc. a a Outra convenao importante que todo script Python deve comear com uma linha c e c contendo a string mgica (#!) e a localizaao do interpretador, para que o sistema a c saiba como executar o script5 . Normalmente essa linha ser: a #!/usr/bin/python Essa uma boa hora para dizer, tambm, que em Python os comentrios so feitos e e a a com o s mbolo #. Tudo que vier depois de um # e antes de uma quebra de linha um e comentrio. a Ento vamos colocar nosso primeiro exemplo para funcionar... abra seu editor e a escreva o seguinte: #!/usr/bin/python # define que a variavel variavel conter o valor 10 a variavel = 10 if variavel == 10: print variavel
4

# se varivel for igual a 10 a # mostrar a varivel a

while variavel > 0: # enquanto a varivel for maior que 0 a variavel = variavel - 1 # e, claro, diminuir seu valor
Pr-processados pelo interpretador para se tornar o assembly usado por ele, aumentando a velocie dade de processamento sem perder a portabilidade. 5 Isso no tem validade no Windows... somente em sistemas Unix-like, como o GNU/Linux, o MacOSX, a FreeBSD, HP-UX e outros, j que isso uma convenao Unix. a e c

20

# fim do programa!! Os comentrios esto a s pra voc aprender a us-los =). Eles no so, claro, a a o e a a a e necessrios. Depois de salvar o arquivo com um nome qualquer, teste1.py por exemplo, a abra um terminal e execute os seguintes comandos: $ chmod +x teste1.py $ ./teste1.py O primeiro comando d permisses de execuao ao arquivo, o segundo o executa. O a o c resultado deve ser: python@beterraba:~$ ./teste1.py 10 9 (...) 1 python@beterraba:~$ Hora da brincadeira!! Pegue seu editor preferido e faa testes com o que j aprendeu c a da linguagem!

21

Tipos de Dados

O Python fornece, alm dos tipos bsicos de dados, alguns tipos mais avanados e e a c complexos que podem ser usados com muita facilidade. Quem j teve que usar uma lista a encadeada sabe o quanto complicado implementar esse tipo de estrutura do zero. O e Python facilita muito as coisas, e ns vamos explorar essas capacidades agora! o

4.1

Inteiros e Ponto utuante

Lidar com n meros em Python bem fcil. Como j vimos, o Python detecta o tipo u e a a do dado no momento em que ele atribu a varivel. Isso signica que: e do ` a >>> inteiro = 10 >>> ponto_flutuante = 10.0 >>> print um inteiro: %d, um ponto flutuante: %f % (inteiro, ponto_flutuante) um inteiro: 10, um ponto flutuante: 10.000000

4.2

Strings

Lidar com strings em Python muito simples. O que faz com que o Python detecte e o tipo string so as aspas, simples ou duplas. Vejamos: a >>> meu_nome = "Gustavo" >>> meu_nick = kov >>> print "Meu nome e: %s, meu nick e %s!" % (meu_nome, meu_nick) Meu nome e: Gustavo, meu nick e kov! Como disse anteriormente, quase tudo em Python um objeto. Isso signica que uma e string tem mtodos! Sim! Observe: e

22

>>> nome = "kov" >>> nome.upper () KOV >>> "kov".upper () KOV Note, no entanto, uma coisa muito importante: uma string em Python sempre uma e constante! Voc nunca modica uma string, o que voc pode fazer reatribu e e e -la. Isso signica que se voc quiser que a string continue em letras mai sculas dali para frente e u voc deve fazer nome = nome.upper (). Ns veremos mais sobre como conhecer os e o mtodos dispon e veis. Para acessar partes espec cas da string, voc pode usar a notaao de fatias. E e c importante entender bem essa notaao, porque ela muito util em vrias oportunidades c e a e com alguns outros tipos de dados. >>> nome = Software Livre >>> nome Software Livre >>> nome[1] o >>> nome[1:5] oftw >>> nome[:-1] Software Livr

4.3

Listas e Tuplas

Agora o tipo de dados que serve como vetor e listas encadeadas. Chamamos de lista uma lista que pode ser modicada dinamicamente e de tupla uma lista imvel. o Vamos ver as operaoes principais com listas: c >>> lista = [] # os [] fazem com que lista seja iniciada como lista >>> lista.append (kov) >>> lista = [kov, spuk, o_0] >>> len(lista)

23

3 >>> lista.insert (2, agney) >>> print lista [kov, spuk, agney, o_0] >>> lista.pop () o_0 >>> print lista [kov, spuk, agney] >>> lista.remove (spuk) >>> print lista [kov, agney] Note que todas as operaoes bsicas de lista encadeada so contempladas pela implec a a mentaao de listas do Python. A terceira linha mostra como inicializar uma varivel com c a uma lista pr-criada. A quarta mostra como obter o tamanho da lista usando a funao e c len() 1 . Nesse exemplo usamos strings na lista, mas uma lista pode conter qualquer tipo de dado, inclusive listas, possibilitando a criaao simples de arvores, inclusive. c Algo importante de se notar que d para usar a lista do Python como pilha, usando os e a mtodos append() e pop(). Outra derivaao importante desse exemplo ver que uma lista e c e em Python indexada, como um vetor. Podemos usar lista[0] para acessar o primeiro e tem da lista2 , e podemos usar esse ndice para inserir ns em posioes espec o c cas. As listas tm outros mtodos de extermo interesse, como o sort(), que serve para e e ordenar a lista. E sentar e explorar as possibilidades! As tuplas funcionam quase do mesmo modo que as listas, com a excesso de que a so listas que no so modicveis. Elas so bastante usada como retorno de algumas a a a a a funoes, portanto bom explor-las. Voc reconhece uma tupla por sua similaridade com c e a e uma lista, mas ao invs de usar [] uma tupla usa parnteses. Um exemplo rpido: e e a >>> tupla = (1, 35) >>> tupla[0] 1 >>> tupla (1, 35)
1 2

Note que a funao len() pode ser usada em outros tipos de dados, como strings, por exemplo c Em Python, como em C, ndices sempre comeam do 0. c

24

4.4

Dicionrios a

Quem j ouviu falar de Hash tables vai se sentir familiarizado com os dicionrios rapia a damente. Os dicionrios em Python so, literalmente, estruturas de dados que permitem a a traduzir uma chave para um valor. Seu uso muito simples: e >>> linguagem = {} >>> linguagem[nome] = Python >>> linguagem[tipo] = scripting >>> linguagem[2] = 100 >>> linguagem[2] 100 >>> linguagem[tipo] scripting

4.5

Converso / Casting a

Python usa tipagem forte. Isso signica que se uma varivel contm um inteiro ela a e no pode simplesmente ser usada como se fosse uma varivel de ponto utuante. Para a a esse tipo de coisas necessrio fazer uma converso. Aqui esto exemplos: e a a a >>> a = 10 >>> str (a) 10 >>> float (a) 10.0 >>> int (25) 25

25

Funoes c

5.1

Sintaxe Bsica a

Funoes em python tem uma sintaxe muito parecida com qualquer outra linguagem. O c uso de parnteses obrigatrio, mesmo que no aja argumentos, ao contrrio de algumas, e e o a a com a unica excesso da funao interna print. a c Declarar uma funao em Python muito simples: c e >>> def minha_funcao (argumento): ... ... >>> minha_funcao (123kokoko!) 123kokoko! Como pode ser visto, o bloco que implementa a funao tambm demarcado pela c e e indentaao. c print argumento

5.2

Passagem Avanada de Argumentos c

Os argumentos no tm tipo declarado, o que d uma grande exibilidade. Os ara e a gumentos podem ter valores padro, tambm, e voc pode dar valores espec a e e cos para argumentos opcionais fora da localizaao deles, nesses casos. Vejamos: c >>> def mostra_informacoes (obrigatorio, nome = kov, idade=20): ... ... >>> mostra_informacoes (123) obrigatorio: 123 print "obrigatorio: %s\nnome: %s\nidade: %d" % (obrigatorio, nome, idade)

26

nome: kov idade: 20 >>> mostra_informacoes (123, idade = 10) obrigatorio: 123 nome: kov idade: 10

5.3

Retorno da funo ca

Para retornar um (ou mais) valores em uma funao basta usar a declaraao return. c c Voc pode, inclusive, retornar diversos valores e, como na passagem de parmetros, no e a a precisa declarar o tipo de dado retornado: >>> def soma_e_multiplica (x, y): ... ... ... ... >>> c, d = soma_e_multiplica (4, 5) >>> print c 9 >>> print d 20 a = x + y b = x * y return a, b

5.4

Documentando

Uma caracter stica interessante do Python a possibilidade de documentar cdigo no e o prprio cdigo, sem usar ferramentas externas. Basta colocar uma string envolvida por o o sequncias de trs aspas: e e >>> def funcao (x): ... ... ... ... recebe um inteiro, multiplica ele por si mesmo """ funcao (x) -> inteiro

27

... ... ... ...

e retorna o resultado """ return x * x

>>> help (funcao) Help on function funcao in module __main__: funcao(x) funcao (x) -> inteiro recebe um inteiro, multiplica ele por si mesmo e retorna o resultado

28

Classes

Classes so como idias. So um dos pilares da orientaao a objetos. Se pensarmos a e a c como lsofos podemos associar um objeto (ou uma instncia, o que mais correto no o a e caso do Python) a um ente concreto, um indiv duo. O exemplo clssico pensar em a e ser humano, uma classe, e Jos da Silva, um exemplar dessa classe, uma instncia dessa e a classe.

6.1

Criando estruturas em Python

No Pascal so conhecidos como registros, no C como estruturas ou structs. O Python a por incr vel que parea no tem uma estrutura de dado como essa. Para implementar c a algo similar a um registro necessrio usar uma classe. e a A sintaxe muito simples: e >>> class registro: ... ... ... >>> r = registro () >>> r.nome = "kov" >>> r.idade = 10 >>> print r.nome kov A unica diferena existente entre uma classe e uma estrutura, quando se usa assim, c que voc pode criar novos membros dentro da classe a qualquer momento, bastando e e atribuir algo. nome = "" idade = 0

29

6.2

Mtodos e

Denir mtodos em classes Python uma questo de denir uma funao dentro da e e a c classe (a indentaao marca o bloco, lembre-se). O importante que o nome que voc c e e passar como primeiro argumento para um mtodo representa o prprio objeto (anlogo e o a ao this de outras linguagens), mas no precisa ser passado como argumento quando for a chamar o mtodo. Um exemplo: e >>> class humano: ... ... ... ... ... >>> eu = humano () >>> eu.falar ("qualquer coisa") qualquer coisa Existe um mtodo especial para toda classe, chamado e init . Esse mtodo anlogo e e a def falar (self, oque): self.print (oque) def imprimir (self, oque): print oque

ao construtor de outras linguagens. Ele chamado quando voc instancia um objeto, e e e os argumentos passados na chamada de instanciaao so passados para esse mtodo. c a e

6.3

Herana c

O Python permite herana de classes. Podemos, ento, denir uma nova classe que c a herda as caracter sticas de registro e humano, que denimos acima assim: >>> class coisa (registro,humano): ... ... ... >>> c = coisa () >>> c.falar ("abc") abc E claro, poss herdar uma classe apenas, bastando colocar seu nome entre parnteses. e ve e def coisar (self): print "eu coiso, tu coisas, ele coisa..."

30

Arquivos / IO

Lidar com arquivos em Python coisa muito simples. Uma das primeiras coisas que e eu procuro fazer quando aprendo uma linguagem abrir, ler e gravar em um arquivo, e ento vamos ver aqui como fazer. Um arquivo aberto um objeto, para criar esse objeto a e usando a funao open, que ser muito familiar para programadores da linguagem C: c a >>> arq = open (/tmp/meuarquivo.txt, w) >>> arq.write (meu teste de escrever em arquivo\nmuito legal) >>> arq.close () O primeiro argumento de open o nome do arquivo, e o segundo o modo como ele e e ser aberto. Os modos poss a veis so: w para apagar o que existir e abrir para escrita a (cria o arquivo se no existir); w+ faz o mesmo que w, mas abre para escrita e leitura; a r, abre para leitura; a abre o arquivo para escrita, mantendo o conte do e posiciona u o cursor no nal do arquivo; a+ faz o mesmo que a, mas abre para leitura e escrita. O mtodo write da instncia do objeto arq est sendo usado para gravar a string e a a no arquivo. Voc pode usar a mesma notaao usada com print entre os parmetros do e c a mtodo (na verdade voc pode usar a notaao do print em qualquer lugar que receba uma e e c string). Para ler um arquivo: >>> arq = open (/tmp/meuarquivo.txt) >>> arq.read () meu teste de escrever em arquivo\nmuito legal >>> arq.readline () >>> arq.seek(0) >>> arq.readline ()

31

meu teste de escrever em arquivo\n Como podemos ver, no necessrio especicar o modo de abertura quando s se a e a o quer ler. A funao open assume o segundo argumento como sendo r. O mtodo read() c e l o arquivo completo, como podemos ver, e qualquer tentativa de leitura resulta em uma e string vazia, como vemos na quarta linha. O mtodo seek() serve para posicionar o cursor e no arquivo e a readline() serve para ler uma linha apenas. O mtodo close() seria usado e nesse caso, tambm. e

Você também pode gostar