SlideShare uma empresa Scribd logo
Gustavo Noronha Silva
Curso de Python
F´orum Mineiro de Software Livre
Montes Claros
setembro/2003
Sum´ario
Nota de Copyright
Agradecimentos
1 Introdu¸c˜ao p. 6
2 Revis˜ao de Conceitos p. 7
2.1 Linguagem Interpretada vs Compilada . . . . . . . . . . . . . . . . . . p. 7
2.2 Tipagem Forte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 7
2.3 Orienta¸c˜ao a Objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 8
3 M˜ao na massa! p. 9
3.1 O Interpretador Python . . . . . . . . . . . . . . . . . . . . . . . . . . p. 9
3.2 M´odulos, as bibliotecas do Python . . . . . . . . . . . . . . . . . . . . . p. 10
3.3 Se virando no Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 11
3.3.1 A fun¸c˜ao dir() . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 11
3.3.2 PyDoc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 12
3.3.3 Nosso amigo help() . . . . . . . . . . . . . . . . . . . . . . . . . p. 12
3.4 Vari´aveis e mais sintaxe b´asica . . . . . . . . . . . . . . . . . . . . . . . p. 15
3.5 Condi¸c˜oes e Estruturas de Repeti¸c˜ao . . . . . . . . . . . . . . . . . . . p. 16
3.6 Usando um editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 19
4 Tipos de Dados p. 22
4.1 Inteiros e Ponto flutuante . . . . . . . . . . . . . . . . . . . . . . . . . p. 22
4.2 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 22
4.3 Listas e Tuplas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 23
4.4 Dicion´arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 25
4.5 Convers˜ao / Casting . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 25
5 Fun¸c˜oes p. 27
5.1 Sintaxe B´asica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 27
5.2 Passagem Avan¸cada de Argumentos . . . . . . . . . . . . . . . . . . . . p. 27
5.3 Retorno da fun¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 28
5.4 Documentando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 28
6 Classes p. 30
6.1 Criando estruturas em Python . . . . . . . . . . . . . . . . . . . . . . . p. 30
6.2 M´etodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 31
6.3 Heran¸ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 31
7 Arquivos / IO p. 33
Nota de Copyright
Copyright ( c ) 2003, Gustavo Noronha Silva <kov@debian.org>
Esse curso est´a licenciado sob a GNU FDL (Free Documentation License), fornecida pela
Free Software Foundation.
Agradecimentos
Muito obrigado a Allan Douglas <allan douglas@gmx.net> pela grande ajuda na escrita
desse curso.
6
1 Introdu¸c˜ao
A programa¸c˜ao nos dias atuais est´a centrada em uma briga de gigantes que pretendem
impˆor seus padr˜oes para substituir a linguagem conhecida como “padr˜ao da ind´ustria”,
C++.
Correndo por fora est˜ao linguagens relativamente pouco conhecidas e aclamadas, tal-
vez por serem fruto do esfor¸co de grandes mestres da computa¸c˜ao (como as primeiras
linguagens) e n˜ao por grandes empresas.
Python ´e uma dessas linguagens e traz uma simplicidade indiscut´ıvel, ao mesmo tempo
em que, apesar de ser uma linguagem interpretada, ´e extremamente veloz.
Aqueles que j´a programam h´a tempos com linguagens cheias de controle sint´atico v˜ao
certamente se sentir perdidos num primeiro contato, mas perceber˜ao que Python se adapta
muito bem ao modelo mental do programador e vai se sentir falando com a m´aquina em
pouco tempo.
7
2 Revis˜ao de Conceitos
Python ´e uma linguagem simples, mas ´e constru´ıda em uma base te´orica e t´ecnica
muito complexa. Ela eleva a orienta¸c˜ao a objetos, em alguns casos, ao extremo.
Vamos dar uma revisada em alguns conceitos importantes que nos subsidiar˜ao no
aprendizado de Python.
2.1 Linguagem Interpretada vs Compilada
Python, como j´a foi dito, ´e uma linguagem interpretada, como Perl, Shell Script,
Batch Scripts, entre outras. Isso significa que n˜ao ´e necess´aria a compila¸c˜ao do c´odigo
para que ele seja executado e isso tr´as v´arias vantagens e desvantagens embutidas.
Linguagens compiladas normalmente s˜ao mais r´apidas, porque o c´odigo j´a est´a num
formato que o computador entende. Linguagens interpretadas costumam funcionar de
uma ou outra maneira:
• Compila¸c˜ao Just-In-Time
• Interpreta¸c˜ao pura ou em Bytecode
O Python pode funcionar das duas formas. Vamos usar mais o segundo modelo
durante o curso, mas n˜ao se esque¸ca de conferir o compilador JIT do Python.
2.2 Tipagem Forte
Python ´e uma linguagem de tipagem forte. Isso significa que se uma vari´avel adquire
um determinado tipo n˜ao deixa mais de ser daquele tipo a menos que seja recriada. Isso
o torna diferente de um script Shell, por exemplo, em que nunca se sabe o tipo exato de
uma vari´avel.
8
Apesar da sua tipagem ser forte, a declara¸c˜ao de vari´aveis n˜ao ´e necess´aria e a simples
atribui¸c˜ao de um valor serve para criar ou recriar uma vari´avel. Leve isso em conta quando
programar. Tome muito cuidado com os nomes das vari´aveis.
2.3 Orienta¸c˜ao a Objeto
Dou uma ˆenfase especial a esse conceito, pois j´a vi muita gente dizer que uma lingua-
gem ´e orientada a objetos “porque vocˆe pode criar interfaces gr´aficas”1
. N˜ao tem nada a
ver.
Uma linguagem orientada a objetos coloca como centro nervoso do programa um ou
mais objetos de determinada classe, ao contr´ario das linguagens estruturadas, em que o
processo, ou as estruturas de dados s˜ao o centro e vocˆe chama fun¸c˜oes que atuam sobre
esses elementos.
Isso n˜ao significa, ´e claro, que n˜ao se pode criar aplica¸c˜oes com interfaces gr´aficas com
Python ou com qualquer outra linguagem orientada ou n˜ao a objetos.
Python ´e uma linguagem orientada a objetos, e nela quase tudo ´e um objeto. At´e
mesmo as vari´aveis que representam os tipos mais b´asicos, como inteiro e caractere s˜ao
objetos, tˆem seus m´etodos e propriedades.
1
Outro conceito extremamente errado e muito difundido ´e que C ´e para aplica¸c˜oes comuns e C++
para interfaces gr´aficas. Talvez seja exatamente uma deriva¸c˜ao do conceito errado que eu cito aqui, j´a
que C++ ´e orientada a objetos e C n˜ao.
9
3 M˜ao na massa!
Vamos ent˜ao come¸car! A primeira coisa a fazer ´e nos familiarizarmos com o interpre-
tador Python, que pode nos ser muito ´util a qualquer momento. Veremos como descobrir
informa¸c˜oes sobre um determinado elemento e como usar o interpretador para testarmos
pequenos trechos de c´odigo.
3.1 O Interpretador Python
O interpretador ´e o programa que executa c´odigo Python. Para execut´a-lo basta abrir
um terminal e digitar ‘python’. Vocˆe ver´a algo desse tipo:
O que vemos nas trˆes primeiras linhas ´e a apresenta¸c˜ao do interpretador. Ele est´a
dizendo “oi!” =D. Basicamente ele informa de que vers˜ao do Python se trata, com que
compilador foi compilado e sugere algumas chamadas b´asicas caso tenha problemas ou
d´uvidas.
10
O >>> ´e o prompt do interpretador. Podemos sair programando em Python agora
mesmo. O interpretador vai executar o c´odigo que escrevermos na hora, e poderemos ver
o resultado.
J´a que o interpretador nos disse “oi” n˜ao sejamos mal-educados, vamos responder a
ele, digitando o seguinte:
>>> print ’Ol´a, Python!’
Ol´a, Python!
´Otimo! Podemos ver que ‘print’ serve para mostrar mensagens na tela. Vocˆe pode
usar aspas simples ou duplas para delimitar a mensagem. A fun¸c˜ao ‘print’ ´e uma excess˜ao
entre as fun¸c˜oes do Python, j´a que ela n˜ao precisa de parenteses. Note, tamb´em, que n˜ao
h´a um caractere delimitador da chamada (como “;” em C e Pascal).
3.2 M´odulos, as bibliotecas do Python
No Python chamamos as cole¸c˜oes de c´odigo que fornecem extens˜oes para a linguagem
de m´odulos. Pode-se fazer uma associa¸c˜ao `as bibliotecas usadas em C (e, na verdade,
algumas vezes os m´odulos s˜ao bibliotecas). Para us´a-los, temos que import´a-los. Mas
cuidado com a balan¸ca comercial, hein! (duh)
O Python procura sempre proteger o chamado espa¸co de nomes e, portanto, sempre
que vocˆe importar um m´odulo ter´a de usar seu nome para chamar fun¸c˜oes e acessar
propriedades que est˜ao dentro dele. Isso pode ser familiar para quem lida com Java ou
C#. Vejamos as trˆes formas de importar m´odulos:
>>> 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 m´odulo como um todo, mas exige que sempre que
vocˆe quiser acessar algo que pertence ao m´odulo vocˆe tenha que adicionar “os.” antes da
fun¸c˜ao ou propriedade. O segundo, “from os import getcwd”, importa somente aquela
fun¸c˜ao determinada; isso pode usar menos mem´oria e n˜ao ´e mais necess´ario usar “os.”
antes de chamar a fun¸c˜ao; a terceira forma ´e como a segunda, mas ao inv´es de importar
uma s´o fun¸c˜ao, importa todas.
3.3 Se virando no Python
Este documento n˜ao pretende ser uma referˆencia completa sobre o Python. Ent˜ao,
como obter ajuda? Como descobrir quais s˜ao as funcionalidades presentes nesta lingua-
gem? Como “se virar”?
3.3.1 A fun¸c˜ao dir()
O Python tem uma fun¸c˜ao chamada dir(). Ela fornece `a linguagem a capacidade de
reflex˜ao, presente em linguagens como Java. Isso significa que vocˆe pode listar o conte´udo
de m´odulos e qualquer outro tipo de objeto1
. Isso ajuda a saber sobre o que queremos
ajuda, por exemplo. Vamos ver como funciona:
>>> dir (__builtins__)
(...)
’reduce’, ’reload’, ’repr’, ’round’, ’setattr’, ’slice’,
’staticmethod’, ’str’, ’sum’, ’super’, ’tuple’, ’type’, ’unichr’,
’unicode’, ’vars’, ’xrange’, ’zip’]
>>> import sys
>>> dir (sys)
(...)
’prefix’, ’ps1’, ’ps2’, ’setcheckinterval’, ’setdlopenflags’,
’setprofile’, ’setrecursionlimit’, ’settrace’, ’stderr’, ’stdin’,
’stdout’, ’version’, ’version_info’, ’warnoptions’]
>>> dir("umastring")
(...)
rip’, ’replace’, ’rfind’, ’rindex’, ’rjust’, ’rstrip’, ’split’,
1
M´odulos s˜ao objetos, depois de importados, e quase tudo em Python ´e um objeto, at´e uma string!
12
’splitlines’, ’startswith’, ’strip’, ’swapcase’, ’title’, ’translate’,
’upper’, ’zfill’]
Isso significa que o espa¸co de nomes builtins , carrega aquelas fun¸c˜oes ou proprie-
dades2
, que o m´odulo sys tem aquelas listadas, e que vocˆe pode usar aqueles m´etodos em
qualquer string.
3.3.2 PyDoc
pydoc ´e um software que acompanha a distribui¸c˜ao oficial do Python. Ele permite
acesso `a documenta¸c˜ao presente nas docstrings3
dos objetos.
H´a v´arios modos de utiliza-lo, um dos mais ´uteis ´e chamando-o para que monte um
pequeno servidor HTTP. Digite em um terminal:
$ pydoc -p 1234
pydoc server ready at http://localhost:1234/
Ele criar´a um servidor que pode ser acessado pelo endere¸co http://localhost:1234. A
p´agina ´e produzida automaticamente, e lista os m´odulos Python instalados. Clicando-se
em um dos m´odulos pode-se visualizar quais s˜ao a fun¸c˜oes (m´etodos) dispon´ıveis, sua
sintaxe e tamb´em uma breve descri¸c˜ao.
3.3.3 Nosso amigo help()
O interpretador Python oferece um mecanismo de ajuda simples e eficiente. Ele provˆe
uma fun¸c˜ao help(), que permite acessar parte da documenta¸c˜ao oficial Python e o PyDoc.
Ele poder´a ser chamado para uma sess˜ao interativa:
>>> help()
(Apresenta¸c~ao)
help>
help> ´e o prompt do help. Tudo o que vocˆe digitar a partir de agora, ser´a interpretado
pelo help. Digite ‘quit’ para sair. Para visualizar a documenta¸c˜ao docstring de um m´odulo,
basta digitar o nome do m´odulo:
2
Uma propriedade, normalmente, ´e uma vari´avel.
3
As docstrings s˜ao textos inclu´ıdos no in´ıcio da defini¸c˜ao de uma classe ou fun¸c˜ao documentando-as.
Veja mais detalhes na se¸c˜ao 5.4 do cap´ıtulo sobre Fun¸c˜oes, p´agina 28.
13
help> os
Help on module os:
NAME
os - OS routines for Mac, DOS, NT, or Posix depending on what system
we’re on.
(...)
Use as setas do teclado para ir para baixo/cima e aperte ‘q’ para sair. Para saber
quais s˜ao os modulos dispon´ıveis, digite ‘modules’:
help> modules
Please wait a moment while I gather a list of all available modules...
ArrayPrinter asyncore linuxaudiodev sgmllib
BaseHTTPServer atexit locale sha
Bastion audiodev logging (package) shelve
CDROM audioop macpath shlex
(...)
Para procurar um m´odulo por palavra-chave, digite ‘module palavra’ e o help retornar´a
uma lista de modulos que correspondem `aquela palavra.
Al´em da documenta¸c˜ao dos m´odulos, o help permite que vocˆe obtenha ajuda em
determinados t´opicos. Os assuntos s˜ao variados, v˜ao desde a descri¸c˜ao dos tipos b´asicos
at´e como fazer o debugging de um programa. Digite ‘topics’ para ver quais s˜ao os topicos
dispon´ıveis.
Esqueceu qual a sintaxe do if ou de outra palavra-chave? N˜ao tema! O help tamb´em
oferece um r´apido acesso `a gram´atica das palavras-chave, com uma breve descri¸c˜ao de seu
uso. No help, digite ‘keywords’ para saber quais s˜ao as palavras-chaves. E para acessar
sua documenta¸c˜ao, ´e s´o digitar o nome:
help> if
7.1 The if statement
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 sess˜ao interativa. Para obter a documenta¸c˜ao
de um m´odulo ou fun¸c˜ao, ´e necess´ario, primeiramente, import´a-lo:
>>> 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 t´opicos, ´e preciso chamar o help deli-
mitando o nome do t´opico ou palavra-chave com aspas:
>>> 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 Vari´aveis e mais sintaxe b´asica
Vamos continuar usando o interpretador. Agora vamos ver um pouco sobre vari´aveis.
Vari´aveis s˜ao estruturas simples que servem para guardar dados. Como eu j´a disse, n˜ao ´e
necess´ario declarar vari´aveis em Python. Vamos dar uma olhada ent˜ao:
15
>>> variavel = 1
>>> print variavel
1
>>> variavel
1
A primeira linha coloca 1 na vari´avel de nome variavel. A segunda linha mostra
variavel na tela e a terceira retorna o valor de variavel. ´E muito importante fazer distin¸c˜ao
entre essas duas ´ultimas.
Um programador deve saber que normalmente toda “afirma¸c˜ao” que ´e feita em um
programa ´e, na verdade, uma express˜ao, na maioria das linguagens. Em Python, sempre.
Sempre existe uma avalia¸c˜ao do valor e um retorno do valor. O sentido pr´atico disso ´e
que o segundo 1 n˜ao seria realmente mostrado na tela em um programa de verdade, ele
seria retornado para nada.
As opera¸c˜oes com n´umeros s˜ao feitas como em outras linguagens:
>>> soma = 1 + 1
>>> print soma
2
>>> mult = soma * 3
>>> print mult
6
J´a que estamos lidando com vari´aveis, vamos ver como usar o print para coisas mais
complexas. Vamos mostrar vari´aveis com ele. Existem v´arias formas. Observe:
>>> 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 lembran¸cas aos programadores de C =). Eu, particularmente,
prefiro a segunda forma, mas a primeira nos ensina duas coisas importantes: 1) ´e poss´ıvel
16
somar strings (e, veremos mais a frente, outros tipos de dados, tamb´em!) e 2) os tipos
em Python s˜ao fortes, vocˆe tem que converter o inteiro para string se quiser concatenar
os dois.
Vamos analizar melhor a segunda. Entre aspas temos o que chamamos de formato,
que ´e a defini¸c˜ao do que aparecer´a na tela. A string “%d” significa que ali ser´a colocado
um inteiro. Depois do formato colocamos um separador (um “%”) e, entre parˆenteses
uma lista separada por v´ırgulas, das vari´aveis que queremos que substituam os c´odigos.
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 Condi¸c˜oes e Estruturas de Repeti¸c˜ao
Anets de come¸carmos a se¸c˜ao propriamente dita, ´e necess´ario entender como o Python
marca o in´ıcio e o final de blocos. Aqueles acostumados com C e Pascal estar˜ao acostu-
mados com coisas do tipo:
if (variavel == 10)
{
printf ("´E 10!!!n");
}
Ou
if (variavel = 10) then
begin
writeln ("´E 10!!!");
end;
O Python, para o desgosto de alguns, n˜ao tem estruturas sint´aticas de abertura e
fechamento de blocos. O Python usa a indenta¸c˜ao para definir o in´ıcio e t´ermino de
blocos. O problema aqui ´e que muitos programadores n˜ao tˆem h´abito de fazer uma
17
indenta¸c˜ao consistente. A vantagem do Python ´e que ele obriga o programador a ter uma
indenta¸c˜ao consistente. =)
Portanto, para come¸car um bloco de condi¸c˜ao, ´e necess´ario um n´ıvel de indenta¸c˜ao.
Para indentar, pressione a tecla tab. Um exemplo:
>>> variavel = 10
>>> if variavel == 10:
... print "´E 10!!"
...
´E 10!!
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 n˜ao ´e necess´ario adicionar uma linha em branco
para terminar um bloco, basta n˜ao indentar a linha seguinte. N´os veremos isso melhor
mais a frente.
Outra coisa importante: como eu disse inicialmente, no Python toda “afirmativa”
´e uma express˜ao. Mas, diferentemente do C, o Python n˜ao aceita atribui¸c˜oes em con-
textos que devem ser somente usados para express˜oes de condi¸c˜ao. Por exemplo, como
vimos, o Python usa o operador “==” para compara¸c˜oes. Se eu fizer if variavel = 10 o
interpretador ir´a emitir um erro, porque atribui¸c˜oes n˜ao s˜ao permitidas em um if.
Vocˆe pode fazer testes de condi¸c˜ao mais complexos com Python, tamb´em:
>>> a = 2
>>> b = 6
>>> if variavel == 10 and a == 2:
... print "aaa"
... elif b == 6:
... print "bbb"
... else:
... print "ccc"
...
aaa
18
Outros operadores podem ser usados, como “or” para rela¸c˜ao entre compara¸c˜oes, e
“! =”, “<”, “>”, “<=” e assim por diante, para rela¸c˜ao entre vari´aveis e valores.
Um loop for (para) em Python se parece muito com o estilo Pascal de for. Ele exige
um tipo de dado mais complexo, que n´os veremos mais para frente, que ´e a lista. Mas
por enquanto vamos ver o b´asico do for:
>>> for contador in range (0, 3):
... print contador
...
0
1
2
A fun¸c˜ao range serve para retornar uma lista que contenha o intervalo dado pelos
n´umeros especificados. Preste muita aten¸c˜ao. O primeiro n´umero que vocˆe especificar
sempre entra no intervalo, o ´ultimo nunca. Em matem´atica poder´ıamos representar isso
assim: [0, 3[.
Um while segue, essencialmente a mesma l´ogica de qualquer outro while que eu j´a vi:
>>> contador = 3
>>> while contador > 0:
... print "Python!"
... contador = contador - 1
...
Python!
Python!
Python!
3.6 Usando um editor
Sim! Vamos parar de usar o interpretador diretamente para criar nossos c´odigos e
vamos passar para um editor, o que nos permitir´a salvar nossos programas. Isso n˜ao
significa que vamos esquecer o interpretador daqui para frente: muito pelo contr´ario! O
interpretador vai ser quem rodar´a, efetivamente, o programa criado, e tamb´em o usaremos
para obter ajuda e testar pequenos peda¸cos de c´odigo enquanto programamos.
19
Podemos usar qualquer editor que seja capaz de salvar texto puro. Isso significa qual-
quer editor, provavelmente. Muitas pessoas tˆem a id´eia errada de que ´e necess´ario um
programa espec´ıfico para programar. Muitas pessoas tamb´em cometem o erro de chamar
esses programas de “compiladores”. Na verdade esses programas s˜ao chamados IDE’s
(Integrated Development Environmet). H´a diversos IDE’s para Python e n´os conhecere-
mos um mais `a frente. No entanto, por agora, vamos escolher qualquer editor simples e
come¸car!
Algumas conven¸c˜oes para as quais devemos atentar: os arquivos execut´aveis Python
normalmente n˜ao tˆem extens˜ao, para manter a coerˆencia com o resto do sistema. Os que
tˆem usam “.py” como extens˜ao. Os arquivos podem ser “byte-compilados”4
e, nesse caso,
receber˜ao a extens˜ao “.pyc”.
Outra conven¸c˜ao importante ´e que todo script Python deve come¸car com uma linha
contendo a “string m´agica” (#!) e a localiza¸c˜ao do interpretador, para que o sistema
saiba como executar o script5
. Normalmente essa linha ser´a:
#!/usr/bin/python
Essa ´e uma boa hora para dizer, tamb´em, que em Python os coment´arios s˜ao feitos
com o s´ımbolo #. Tudo que vier depois de um # e antes de uma quebra de linha ´e um
coment´ario.
Ent˜ao vamos colocar nosso primeiro exemplo para funcionar... abra seu editor e
escreva o seguinte:
#!/usr/bin/python
# define que a variavel ’variavel’ conter´a o valor 10
variavel = 10
if variavel == 10: # se vari´avel for igual a 10
while variavel > 0: # enquanto a vari´avel for maior que 0
print variavel # mostrar a vari´avel
variavel = variavel - 1 # e, claro, diminuir seu valor
4
Pr´e-processados pelo interpretador para se tornar o “assembly” usado por ele, aumentando a veloci-
dade de processamento sem perder a portabilidade.
5
Isso n˜ao tem validade no Windows... somente em sistemas Unix-like, como o GNU/Linux, o MacOSX,
FreeBSD, HP-UX e outros, j´a que isso ´e uma conven¸c˜ao Unix.
20
# fim do programa!!
Os coment´arios est˜ao a´ı s´o pra vocˆe aprender a us´a-los =). Eles n˜ao s˜ao, ´e claro,
necess´arios. Depois de salvar o arquivo com um nome qualquer, “teste1.py” por exemplo,
abra um terminal e execute os seguintes comandos:
$ chmod +x teste1.py
$ ./teste1.py
O primeiro comando d´a permiss˜oes de execu¸c˜ao ao arquivo, o segundo o executa. O
resultado deve ser:
python@beterraba:~$ ./teste1.py
10
9
(...)
1
python@beterraba:~$
Hora da brincadeira!! Pegue seu editor preferido e fa¸ca testes com o que j´a aprendeu
da linguagem!
21
4 Tipos de Dados
O Python fornece, al´em dos tipos b´asicos de dados, alguns tipos mais avan¸cados e
complexos que podem ser usados com muita facilidade. Quem j´a teve que usar uma lista
encadeada sabe o quanto ´e complicado implementar esse tipo de estrutura do zero. O
Python facilita muito as coisas, e n´os vamos explorar essas capacidades agora!
4.1 Inteiros e Ponto flutuante
Lidar com n´umeros em Python ´e bem f´acil. Como j´a vimos, o Python detecta o tipo
do dado no momento em que ele ´e atribu´ıdo `a vari´avel. Isso significa que:
>>> 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 ´e muito simples. O que faz com que o Python “detecte”
o tipo string s˜ao as aspas, simples ou duplas. Vejamos:
>>> 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 ´e um objeto. Isso significa que uma
string tem m´etodos! Sim! Observe:
22
>>> nome = "kov"
>>> nome.upper ()
’KOV’
>>> "kov".upper ()
’KOV’
Note, no entanto, uma coisa muito importante: uma string em Python ´e sempre uma
constante! Vocˆe nunca modifica uma string, o que vocˆe pode fazer ´e reatribu´ı-la. Isso
significa que se vocˆe quiser que a string continue em letras mai´usculas dali para frente
vocˆe deve fazer “nome = nome.upper ()”. N´os veremos mais sobre como conhecer os
m´etodos dispon´ıveis.
Para acessar partes espec´ıficas da string, vocˆe pode usar a nota¸c˜ao de “fatias”. ´E
importante entender bem essa nota¸c˜ao, porque ela ´e muito ´util em v´arias oportunidades
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 modificada dinamicamente e de tupla uma lista im´ovel.
Vamos ver as opera¸c˜oes principais com listas:
>>> 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 opera¸c˜oes b´asicas de lista encadeada s˜ao contempladas pela imple-
menta¸c˜ao de listas do Python. A terceira linha mostra como inicializar uma vari´avel com
uma lista pr´e-criada. A quarta mostra como obter o tamanho da lista usando a fun¸c˜ao
len() 1
. Nesse exemplo usamos strings na lista, mas uma lista pode conter qualquer tipo
de dado, inclusive listas, possibilitando a cria¸c˜ao simples de ´arvores, inclusive.
Algo importante de se notar ´e que d´a para usar a lista do Python como pilha, usando os
m´etodos append() e pop(). Outra deriva¸c˜ao importante desse exemplo ´e ver que uma lista
em Python ´e indexada, como um vetor. Podemos usar “lista[0]” para acessar o primeiro
´ıtem da lista2
, e podemos usar esse ´ındice para inserir n´os em posi¸c˜oes espec´ıficas.
As listas tˆem outros m´etodos de extermo interesse, como o sort(), que serve para
ordenar a lista. ´E sentar e explorar as possibilidades!
As tuplas funcionam quase do mesmo modo que as listas, com a excess˜ao de que
s˜ao listas que n˜ao s˜ao modific´aveis. Elas s˜ao bastante usada como retorno de algumas
fun¸c˜oes, portanto ´e bom explor´a-las. Vocˆe reconhece uma tupla por sua similaridade com
uma lista, mas ao inv´es de usar [] uma tupla usa parˆenteses. Um exemplo r´apido:
>>> tupla = (1, 35)
>>> tupla[0]
1
>>> tupla
(1, 35)
1
Note que a fun¸c˜ao len() pode ser usada em outros tipos de dados, como strings, por exemplo
2
Em Python, como em C, ´ındices sempre come¸cam do 0.
24
4.4 Dicion´arios
Quem j´a ouviu falar de Hash tables vai se sentir familiarizado com os dicion´arios rapi-
damente. Os dicion´arios em Python s˜ao, literalmente, estruturas de dados que permitem
“traduzir” uma chave para um valor. Seu uso ´e muito simples:
>>> linguagem = {}
>>> linguagem[’nome’] = ’Python’
>>> linguagem[’tipo’] = ’scripting’
>>> linguagem[2] = 100
>>> linguagem[2]
100
>>> linguagem[’tipo’]
’scripting’
4.5 Convers˜ao / Casting
Python usa tipagem forte. Isso significa que se uma vari´avel cont´em um inteiro ela
n˜ao pode simplesmente ser usada como se fosse uma vari´avel de ponto flutuante. Para
esse tipo de coisas ´e necess´ario fazer uma convers˜ao. Aqui est˜ao exemplos:
>>> a = 10
>>> str (a)
’10’
>>> float (a)
10.0
>>> int (’25’)
25
25
5 Fun¸c˜oes
5.1 Sintaxe B´asica
Fun¸c˜oes em python tem uma sintaxe muito parecida com qualquer outra linguagem. O
uso de parˆenteses ´e obrigat´orio, mesmo que n˜ao aja argumentos, ao contr´ario de algumas,
com a ´unica excess˜ao da fun¸c˜ao interna print.
Declarar uma fun¸c˜ao em Python ´e muito simples:
>>> def minha_funcao (argumento):
... print argumento
...
>>> minha_funcao (’123kokoko!’)
123kokoko!
Como pode ser visto, o bloco que implementa a fun¸c˜ao tamb´em ´e demarcado pela
indenta¸c˜ao.
5.2 Passagem Avan¸cada de Argumentos
Os argumentos n˜ao tˆem tipo declarado, o que d´a uma grande flexibilidade. Os ar-
gumentos podem ter valores padr˜ao, tamb´em, e vocˆe pode dar valores espec´ıficos para
argumentos opcionais fora da localiza¸c˜ao deles, nesses casos. Vejamos:
>>> def mostra_informacoes (obrigatorio, nome = ’kov’, idade=20):
... print "obrigatorio: %snnome: %snidade: %d" % (obrigatorio, nome, idade)
...
>>> mostra_informacoes (’123’)
obrigatorio: 123
26
nome: kov
idade: 20
>>> mostra_informacoes (’123’, idade = 10)
obrigatorio: 123
nome: kov
idade: 10
5.3 Retorno da fun¸c˜ao
Para retornar um (ou mais) valores em uma fun¸c˜ao basta usar a declara¸c˜ao return.
Vocˆe pode, inclusive, retornar diversos valores e, como na passagem de parˆametros, n˜ao
precisa declarar o tipo de dado retornado:
>>> def soma_e_multiplica (x, y):
... a = x + y
... b = x * y
... return a, b
...
>>> c, d = soma_e_multiplica (4, 5)
>>> print c
9
>>> print d
20
5.4 Documentando
Uma caracter´ıstica interessante do Python ´e a possibilidade de documentar c´odigo no
pr´oprio c´odigo, sem usar ferramentas externas. Basta colocar uma string envolvida por
sequˆencias de trˆes aspas:
>>> def funcao (x):
... """
... funcao (x) -> inteiro
...
... recebe um inteiro, multiplica ele por si mesmo
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
6 Classes
Classes s˜ao como id´eias. S˜ao um dos pilares da orienta¸c˜ao a objetos. Se pensarmos
como fil´osofos podemos associar um objeto (ou uma instˆancia, o que ´e mais correto no
caso do Python) a um ente concreto, um indiv´ıduo. O exemplo cl´assico ´e pensar em
ser humano, uma classe, e Jos´e da Silva, um exemplar dessa classe, uma instˆancia dessa
classe.
6.1 Criando estruturas em Python
No Pascal s˜ao conhecidos como registros, no C como estruturas ou structs. O Python
por incr´ıvel que pare¸ca n˜ao tem uma estrutura de dado como essa. Para implementar
algo similar a um registro ´e necess´ario usar uma classe.
A sintaxe ´e muito simples:
>>> class registro:
... nome = ""
... idade = 0
...
>>> r = registro ()
>>> r.nome = "kov"
>>> r.idade = 10
>>> print r.nome
kov
A ´unica diferen¸ca existente entre uma classe e uma estrutura, quando se usa assim,
´e que vocˆe pode criar novos “membros” dentro da classe a qualquer momento, bastando
atribuir algo.
29
6.2 M´etodos
Definir m´etodos em classes Python ´e uma quest˜ao de definir uma fun¸c˜ao dentro da
classe (a indenta¸c˜ao marca o bloco, lembre-se). O importante ´e que o nome que vocˆe
passar como primeiro argumento para um m´etodo representa o pr´oprio objeto (an´alogo
ao this de outras linguagens), mas n˜ao precisa ser passado como argumento quando for
chamar o m´etodo. Um exemplo:
>>> class humano:
... def falar (self, oque):
... self.print (oque)
... def imprimir (self, oque):
... print oque
...
>>> eu = humano ()
>>> eu.falar ("qualquer coisa")
qualquer coisa
Existe um m´etodo especial para toda classe, chamado init . Esse m´etodo ´e an´alogo
ao construtor de outras linguagens. Ele ´e chamado quando vocˆe instancia um objeto, e
os argumentos passados na chamada de instancia¸c˜ao s˜ao passados para esse m´etodo.
6.3 Heran¸ca
O Python permite heran¸ca de classes. Podemos, ent˜ao, definir uma nova classe que
herda as caracter´ısticas de registro e humano, que definimos acima assim:
>>> class coisa (registro,humano):
... def coisar (self):
... print "eu coiso, tu coisas, ele coisa..."
...
>>> c = coisa ()
>>> c.falar ("abc")
abc
´E claro, ´e poss´ıve herdar uma classe apenas, bastando colocar seu nome entre parˆenteses.
30
7 Arquivos / IO
Lidar com arquivos em Python ´e coisa muito simples. Uma das primeiras coisas que
eu procuro fazer quando aprendo uma linguagem ´e abrir, ler e gravar em um arquivo,
ent˜ao vamos ver aqui como fazer. Um arquivo aberto ´e um objeto, para criar esse objeto
usando a fun¸c˜ao open, que ser´a muito familiar para programadores da linguagem C:
>>> arq = open (’/tmp/meuarquivo.txt’, ’w’)
>>> arq.write (’meu teste de escrever em arquivonmuito legal’)
>>> arq.close ()
O primeiro argumento de open ´e o nome do arquivo, e o segundo ´e o modo como ele
ser´a aberto. Os modos poss´ıveis s˜ao: “w” para apagar o que existir e abrir para escrita
(cria o arquivo se n˜ao existir); “w+” faz o mesmo que “w”, mas abre para escrita e leitura;
“r”, abre para leitura; “a” abre o arquivo para escrita, mantendo o conte´udo e posiciona
o cursor no final do arquivo; “a+” faz o mesmo que “a”, mas abre para leitura e escrita.
O m´etodo write da instˆancia do objeto arq est´a sendo usado para gravar a string
no arquivo. Vocˆe pode usar a mesma nota¸c˜ao usada com print entre os parˆametros do
m´etodo (na verdade vocˆe pode usar a nota¸c˜ao do print em qualquer lugar que receba uma
string).
Para ler um arquivo:
>>> arq = open (’/tmp/meuarquivo.txt’)
>>> arq.read ()
’meu teste de escrever em arquivonmuito legal’
>>> arq.readline ()
’’
>>> arq.seek(0)
>>> arq.readline ()
31
’meu teste de escrever em arquivon’
Como podemos ver, n˜ao ´e necess´ario especificar o modo de abertura quando s´o se
quer ler. A fun¸c˜ao open assume o segundo argumento como sendo “r”. O m´etodo read()
lˆe o arquivo completo, como podemos ver, e qualquer tentativa de leitura resulta em uma
string vazia, como vemos na quarta linha. O m´etodo seek() serve para posicionar o cursor
no arquivo e a readline() serve para ler uma linha apenas. O m´etodo close() seria usado
nesse caso, tamb´em.

Mais conteúdo relacionado

PDF
Introdução à linguagem Python
PDF
Curso de Shell Script 02/11
PDF
Análise de Disco, I/O e Processamento
PDF
O corretor gramatical CoGrOO - IX Evidosol
PDF
Mini curso GOLANG
PDF
Curso de Python (Básico) - Português
PDF
Curso de Shell Script 06/11
Introdução à linguagem Python
Curso de Shell Script 02/11
Análise de Disco, I/O e Processamento
O corretor gramatical CoGrOO - IX Evidosol
Mini curso GOLANG
Curso de Python (Básico) - Português
Curso de Shell Script 06/11

Mais procurados (17)

PDF
Python - Introdução
PDF
Curso python
PDF
Python - Introdução Básica
PPTX
2016/01/27 - Aprendendo a programar com Python
PDF
Python - Guia de bolso
PDF
Algoritmos e programacao_em_python
PDF
Apresentação python fábio jr alves
PDF
Python - Programação funcional
PDF
Apostila de Introdução aos Algoritmos - usando o Visualg
PDF
Curso de Python e Django
PDF
Python - Programando em alto nível
ODP
Shell Script - Luz e trevas
PPT
Introdução ao Deep Learning com o TensorFlow
PDF
PHP não é coisa de moleque
PDF
Windows Registry Fixer (WRF): Automação na Criação de scripts para Controle d...
PDF
Python for zombies (very basic level)
PDF
Curso de shell
Python - Introdução
Curso python
Python - Introdução Básica
2016/01/27 - Aprendendo a programar com Python
Python - Guia de bolso
Algoritmos e programacao_em_python
Apresentação python fábio jr alves
Python - Programação funcional
Apostila de Introdução aos Algoritmos - usando o Visualg
Curso de Python e Django
Python - Programando em alto nível
Shell Script - Luz e trevas
Introdução ao Deep Learning com o TensorFlow
PHP não é coisa de moleque
Windows Registry Fixer (WRF): Automação na Criação de scripts para Controle d...
Python for zombies (very basic level)
Curso de shell
Anúncio

Destaque (20)

PPTX
Curso de python
PDF
Agua instalaciones sanitarias en los edificios [arq. luis lópez]
PDF
Intertemporalidad
PPTX
7 filtros
PDF
Foto Interpretación
PDF
Aire en tuberia
PDF
Manual del-constructor-popular
PPTX
4 estadísticas de las imágenes satelitales
PDF
Agua instalaciones sanitarias en los edificios Arq Luis Lopez
PDF
Cartilla de urbanismo
PDF
Manual vlvulas ventosa
PDF
Mapas y Escalas
PDF
Manual hidrahulica
PPTX
La escala en los mapas
PPTX
6 mejoramientos y realces
PPTX
5 algebra de imágenes
PDF
Instalaciones sanitarias
PDF
Manual de autoconstruccion mi casa apasco
PPTX
6 mejoramientos y realces
Curso de python
Agua instalaciones sanitarias en los edificios [arq. luis lópez]
Intertemporalidad
7 filtros
Foto Interpretación
Aire en tuberia
Manual del-constructor-popular
4 estadísticas de las imágenes satelitales
Agua instalaciones sanitarias en los edificios Arq Luis Lopez
Cartilla de urbanismo
Manual vlvulas ventosa
Mapas y Escalas
Manual hidrahulica
La escala en los mapas
6 mejoramientos y realces
5 algebra de imágenes
Instalaciones sanitarias
Manual de autoconstruccion mi casa apasco
6 mejoramientos y realces
Anúncio

Semelhante a Curso python (20)

PDF
Aula 01 python
PDF
Linguagem de Programação Python
PDF
Trabalho sobre a linguagem Python
PDF
Livro para desenvolvedores de Python
PDF
Python Training #1 - ed5
PDF
python_para_desenvolvedores.pdf
PDF
Python Training #1 ed.6
PDF
Tutorial Python - 1
ODP
Python para desenvolvedores - material apoio (parte I)
KEY
Python 01
PDF
Programando para web com python - Introdução a Python
PDF
Cherrypy - um framework para desenvolvimento rápido de aplicações web
PDF
Python Training #1, ed. 6
PDF
Tutorial Python ed. #2
PDF
Python tutorial-ed3
PDF
Python_2018-03-02-MC102KLMN-Aula02.pdf
PDF
Introdução a linguagem Python 2.7
PDF
Python Training #1 - ed4
PPTX
Introdução a programação em python d2
PDF
minicurso-python-getmeeting.pdf
Aula 01 python
Linguagem de Programação Python
Trabalho sobre a linguagem Python
Livro para desenvolvedores de Python
Python Training #1 - ed5
python_para_desenvolvedores.pdf
Python Training #1 ed.6
Tutorial Python - 1
Python para desenvolvedores - material apoio (parte I)
Python 01
Programando para web com python - Introdução a Python
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Python Training #1, ed. 6
Tutorial Python ed. #2
Python tutorial-ed3
Python_2018-03-02-MC102KLMN-Aula02.pdf
Introdução a linguagem Python 2.7
Python Training #1 - ed4
Introdução a programação em python d2
minicurso-python-getmeeting.pdf

Mais de Tiago (20)

PDF
Programacao php moodle
PDF
Apostila cdtc dotproject
PDF
6572501 ldp-apostila-de-turbo-pascal
PDF
Guia rapido de_pascal
PDF
Python bge
PDF
Threading in c_sharp
PDF
Retirar acentos de_determinado_texto_em_c_sharp
PDF
Remover caracteres especiais_texto_em_c_sharp
PDF
Obter ip da_internet_em_c_sharp
PDF
Metodo using no_c_sharp
PDF
Introdução ao c# para iniciantes
PDF
Interfaces windows em c sharp
PDF
Filestream sistema arquivos
PDF
Curso linux professor rafael
PDF
Curso de shell
PDF
Controle lpt em_c_sharp
PDF
Classes csharp
PDF
C# o basico
PDF
C# classes
PDF
Csharp ebook
Programacao php moodle
Apostila cdtc dotproject
6572501 ldp-apostila-de-turbo-pascal
Guia rapido de_pascal
Python bge
Threading in c_sharp
Retirar acentos de_determinado_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharp
Obter ip da_internet_em_c_sharp
Metodo using no_c_sharp
Introdução ao c# para iniciantes
Interfaces windows em c sharp
Filestream sistema arquivos
Curso linux professor rafael
Curso de shell
Controle lpt em_c_sharp
Classes csharp
C# o basico
C# classes
Csharp ebook

Último (20)

PPTX
INDÚSTRIA_ Histórico da industrialização.pptx
PPTX
Trabalho Cidades sustentáveis ou Utopia.pptx
PDF
Células Introdução para as aulas de EJA.
PPTX
Slide_Macronutrientes e Antinutrientes da Dieta Humana.pptx
PDF
ESPELHOS DA ALMA A PSICOLOGIA POR TRÁS DOS CONTOS DE FADAS.pdf
PDF
CARTÕES DIA DOS ESTUDANTES MORANGO DO AMOR.pdf
PDF
50 anos Hoje - Volume V - 1973 - Manaus Amazonas
PPTX
brasilcolnia2-101027184359-phpapp02.pptx
PPT
História e Evolução dos Computadores domésticos
PPTX
Filosofia Ocidental Antiga 2025 - versão atualizada
PDF
aulademeiodetransporteemlibras-120304202807-phpapp01_removed.pdf
PPTX
Programa Nacional de Saúde do Adulto.pptx
PDF
embriologia_animal_aula_share_2026_semestre
PPTX
norma regulamentadora numero vinte nr 20
PDF
FLUXOGRAMA CLASSE lll - Acesso estritamente proximal.pdf
PPTX
HISTÓRIA DO BRASIL - anos de Democracia.pptx
PPTX
Aula 13 - Tópico Frasal - Argumentação.pptx
PDF
A provisão de jojuador (ramadã) islamismo
PDF
Metabolismo_energético_3ano_pre_vest_2026.pdf
PDF
A relação entre funções executivas e desempenho acadêmico em crianças com Tra...
INDÚSTRIA_ Histórico da industrialização.pptx
Trabalho Cidades sustentáveis ou Utopia.pptx
Células Introdução para as aulas de EJA.
Slide_Macronutrientes e Antinutrientes da Dieta Humana.pptx
ESPELHOS DA ALMA A PSICOLOGIA POR TRÁS DOS CONTOS DE FADAS.pdf
CARTÕES DIA DOS ESTUDANTES MORANGO DO AMOR.pdf
50 anos Hoje - Volume V - 1973 - Manaus Amazonas
brasilcolnia2-101027184359-phpapp02.pptx
História e Evolução dos Computadores domésticos
Filosofia Ocidental Antiga 2025 - versão atualizada
aulademeiodetransporteemlibras-120304202807-phpapp01_removed.pdf
Programa Nacional de Saúde do Adulto.pptx
embriologia_animal_aula_share_2026_semestre
norma regulamentadora numero vinte nr 20
FLUXOGRAMA CLASSE lll - Acesso estritamente proximal.pdf
HISTÓRIA DO BRASIL - anos de Democracia.pptx
Aula 13 - Tópico Frasal - Argumentação.pptx
A provisão de jojuador (ramadã) islamismo
Metabolismo_energético_3ano_pre_vest_2026.pdf
A relação entre funções executivas e desempenho acadêmico em crianças com Tra...

Curso python

  • 1. Gustavo Noronha Silva Curso de Python F´orum Mineiro de Software Livre Montes Claros setembro/2003
  • 2. Sum´ario Nota de Copyright Agradecimentos 1 Introdu¸c˜ao p. 6 2 Revis˜ao de Conceitos p. 7 2.1 Linguagem Interpretada vs Compilada . . . . . . . . . . . . . . . . . . p. 7 2.2 Tipagem Forte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 7 2.3 Orienta¸c˜ao a Objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 8 3 M˜ao na massa! p. 9 3.1 O Interpretador Python . . . . . . . . . . . . . . . . . . . . . . . . . . p. 9 3.2 M´odulos, as bibliotecas do Python . . . . . . . . . . . . . . . . . . . . . p. 10 3.3 Se virando no Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 11 3.3.1 A fun¸c˜ao dir() . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 11 3.3.2 PyDoc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 12 3.3.3 Nosso amigo help() . . . . . . . . . . . . . . . . . . . . . . . . . p. 12 3.4 Vari´aveis e mais sintaxe b´asica . . . . . . . . . . . . . . . . . . . . . . . p. 15 3.5 Condi¸c˜oes e Estruturas de Repeti¸c˜ao . . . . . . . . . . . . . . . . . . . p. 16 3.6 Usando um editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 19 4 Tipos de Dados p. 22 4.1 Inteiros e Ponto flutuante . . . . . . . . . . . . . . . . . . . . . . . . . p. 22
  • 3. 4.2 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 22 4.3 Listas e Tuplas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 23 4.4 Dicion´arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 25 4.5 Convers˜ao / Casting . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 25 5 Fun¸c˜oes p. 27 5.1 Sintaxe B´asica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 27 5.2 Passagem Avan¸cada de Argumentos . . . . . . . . . . . . . . . . . . . . p. 27 5.3 Retorno da fun¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 28 5.4 Documentando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 28 6 Classes p. 30 6.1 Criando estruturas em Python . . . . . . . . . . . . . . . . . . . . . . . p. 30 6.2 M´etodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 31 6.3 Heran¸ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 31 7 Arquivos / IO p. 33
  • 4. Nota de Copyright Copyright ( c ) 2003, Gustavo Noronha Silva <kov@debian.org> Esse curso est´a licenciado sob a GNU FDL (Free Documentation License), fornecida pela Free Software Foundation.
  • 5. Agradecimentos Muito obrigado a Allan Douglas <allan douglas@gmx.net> pela grande ajuda na escrita desse curso.
  • 6. 6 1 Introdu¸c˜ao A programa¸c˜ao nos dias atuais est´a centrada em uma briga de gigantes que pretendem impˆor seus padr˜oes para substituir a linguagem conhecida como “padr˜ao da ind´ustria”, C++. Correndo por fora est˜ao linguagens relativamente pouco conhecidas e aclamadas, tal- vez por serem fruto do esfor¸co de grandes mestres da computa¸c˜ao (como as primeiras linguagens) e n˜ao por grandes empresas. Python ´e uma dessas linguagens e traz uma simplicidade indiscut´ıvel, ao mesmo tempo em que, apesar de ser uma linguagem interpretada, ´e extremamente veloz. Aqueles que j´a programam h´a tempos com linguagens cheias de controle sint´atico v˜ao certamente se sentir perdidos num primeiro contato, mas perceber˜ao que Python se adapta muito bem ao modelo mental do programador e vai se sentir falando com a m´aquina em pouco tempo.
  • 7. 7 2 Revis˜ao de Conceitos Python ´e uma linguagem simples, mas ´e constru´ıda em uma base te´orica e t´ecnica muito complexa. Ela eleva a orienta¸c˜ao a objetos, em alguns casos, ao extremo. Vamos dar uma revisada em alguns conceitos importantes que nos subsidiar˜ao no aprendizado de Python. 2.1 Linguagem Interpretada vs Compilada Python, como j´a foi dito, ´e uma linguagem interpretada, como Perl, Shell Script, Batch Scripts, entre outras. Isso significa que n˜ao ´e necess´aria a compila¸c˜ao do c´odigo para que ele seja executado e isso tr´as v´arias vantagens e desvantagens embutidas. Linguagens compiladas normalmente s˜ao mais r´apidas, porque o c´odigo j´a est´a num formato que o computador entende. Linguagens interpretadas costumam funcionar de uma ou outra maneira: • Compila¸c˜ao Just-In-Time • Interpreta¸c˜ao pura ou em Bytecode O Python pode funcionar das duas formas. Vamos usar mais o segundo modelo durante o curso, mas n˜ao se esque¸ca de conferir o compilador JIT do Python. 2.2 Tipagem Forte Python ´e uma linguagem de tipagem forte. Isso significa que se uma vari´avel adquire um determinado tipo n˜ao deixa mais de ser daquele tipo a menos que seja recriada. Isso o torna diferente de um script Shell, por exemplo, em que nunca se sabe o tipo exato de uma vari´avel.
  • 8. 8 Apesar da sua tipagem ser forte, a declara¸c˜ao de vari´aveis n˜ao ´e necess´aria e a simples atribui¸c˜ao de um valor serve para criar ou recriar uma vari´avel. Leve isso em conta quando programar. Tome muito cuidado com os nomes das vari´aveis. 2.3 Orienta¸c˜ao a Objeto Dou uma ˆenfase especial a esse conceito, pois j´a vi muita gente dizer que uma lingua- gem ´e orientada a objetos “porque vocˆe pode criar interfaces gr´aficas”1 . N˜ao tem nada a ver. Uma linguagem orientada a objetos coloca como centro nervoso do programa um ou mais objetos de determinada classe, ao contr´ario das linguagens estruturadas, em que o processo, ou as estruturas de dados s˜ao o centro e vocˆe chama fun¸c˜oes que atuam sobre esses elementos. Isso n˜ao significa, ´e claro, que n˜ao se pode criar aplica¸c˜oes com interfaces gr´aficas com Python ou com qualquer outra linguagem orientada ou n˜ao a objetos. Python ´e uma linguagem orientada a objetos, e nela quase tudo ´e um objeto. At´e mesmo as vari´aveis que representam os tipos mais b´asicos, como inteiro e caractere s˜ao objetos, tˆem seus m´etodos e propriedades. 1 Outro conceito extremamente errado e muito difundido ´e que C ´e para aplica¸c˜oes comuns e C++ para interfaces gr´aficas. Talvez seja exatamente uma deriva¸c˜ao do conceito errado que eu cito aqui, j´a que C++ ´e orientada a objetos e C n˜ao.
  • 9. 9 3 M˜ao na massa! Vamos ent˜ao come¸car! A primeira coisa a fazer ´e nos familiarizarmos com o interpre- tador Python, que pode nos ser muito ´util a qualquer momento. Veremos como descobrir informa¸c˜oes sobre um determinado elemento e como usar o interpretador para testarmos pequenos trechos de c´odigo. 3.1 O Interpretador Python O interpretador ´e o programa que executa c´odigo Python. Para execut´a-lo basta abrir um terminal e digitar ‘python’. Vocˆe ver´a algo desse tipo: O que vemos nas trˆes primeiras linhas ´e a apresenta¸c˜ao do interpretador. Ele est´a dizendo “oi!” =D. Basicamente ele informa de que vers˜ao do Python se trata, com que compilador foi compilado e sugere algumas chamadas b´asicas caso tenha problemas ou d´uvidas.
  • 10. 10 O >>> ´e o prompt do interpretador. Podemos sair programando em Python agora mesmo. O interpretador vai executar o c´odigo que escrevermos na hora, e poderemos ver o resultado. J´a que o interpretador nos disse “oi” n˜ao sejamos mal-educados, vamos responder a ele, digitando o seguinte: >>> print ’Ol´a, Python!’ Ol´a, Python! ´Otimo! Podemos ver que ‘print’ serve para mostrar mensagens na tela. Vocˆe pode usar aspas simples ou duplas para delimitar a mensagem. A fun¸c˜ao ‘print’ ´e uma excess˜ao entre as fun¸c˜oes do Python, j´a que ela n˜ao precisa de parenteses. Note, tamb´em, que n˜ao h´a um caractere delimitador da chamada (como “;” em C e Pascal). 3.2 M´odulos, as bibliotecas do Python No Python chamamos as cole¸c˜oes de c´odigo que fornecem extens˜oes para a linguagem de m´odulos. Pode-se fazer uma associa¸c˜ao `as bibliotecas usadas em C (e, na verdade, algumas vezes os m´odulos s˜ao bibliotecas). Para us´a-los, temos que import´a-los. Mas cuidado com a balan¸ca comercial, hein! (duh) O Python procura sempre proteger o chamado espa¸co de nomes e, portanto, sempre que vocˆe importar um m´odulo ter´a de usar seu nome para chamar fun¸c˜oes e acessar propriedades que est˜ao dentro dele. Isso pode ser familiar para quem lida com Java ou C#. Vejamos as trˆes formas de importar m´odulos: >>> import os >>> os.getcwd () ’/home/kov’ >>> from os import getcwd >>> getcwd () ’/home/kov’ >>> from os import * >>> getcwd () ’/home/kov’
  • 11. 11 A primeira, “import os”, importa o m´odulo como um todo, mas exige que sempre que vocˆe quiser acessar algo que pertence ao m´odulo vocˆe tenha que adicionar “os.” antes da fun¸c˜ao ou propriedade. O segundo, “from os import getcwd”, importa somente aquela fun¸c˜ao determinada; isso pode usar menos mem´oria e n˜ao ´e mais necess´ario usar “os.” antes de chamar a fun¸c˜ao; a terceira forma ´e como a segunda, mas ao inv´es de importar uma s´o fun¸c˜ao, importa todas. 3.3 Se virando no Python Este documento n˜ao pretende ser uma referˆencia completa sobre o Python. Ent˜ao, como obter ajuda? Como descobrir quais s˜ao as funcionalidades presentes nesta lingua- gem? Como “se virar”? 3.3.1 A fun¸c˜ao dir() O Python tem uma fun¸c˜ao chamada dir(). Ela fornece `a linguagem a capacidade de reflex˜ao, presente em linguagens como Java. Isso significa que vocˆe pode listar o conte´udo de m´odulos e qualquer outro tipo de objeto1 . Isso ajuda a saber sobre o que queremos ajuda, por exemplo. Vamos ver como funciona: >>> dir (__builtins__) (...) ’reduce’, ’reload’, ’repr’, ’round’, ’setattr’, ’slice’, ’staticmethod’, ’str’, ’sum’, ’super’, ’tuple’, ’type’, ’unichr’, ’unicode’, ’vars’, ’xrange’, ’zip’] >>> import sys >>> dir (sys) (...) ’prefix’, ’ps1’, ’ps2’, ’setcheckinterval’, ’setdlopenflags’, ’setprofile’, ’setrecursionlimit’, ’settrace’, ’stderr’, ’stdin’, ’stdout’, ’version’, ’version_info’, ’warnoptions’] >>> dir("umastring") (...) rip’, ’replace’, ’rfind’, ’rindex’, ’rjust’, ’rstrip’, ’split’, 1 M´odulos s˜ao objetos, depois de importados, e quase tudo em Python ´e um objeto, at´e uma string!
  • 12. 12 ’splitlines’, ’startswith’, ’strip’, ’swapcase’, ’title’, ’translate’, ’upper’, ’zfill’] Isso significa que o espa¸co de nomes builtins , carrega aquelas fun¸c˜oes ou proprie- dades2 , que o m´odulo sys tem aquelas listadas, e que vocˆe pode usar aqueles m´etodos em qualquer string. 3.3.2 PyDoc pydoc ´e um software que acompanha a distribui¸c˜ao oficial do Python. Ele permite acesso `a documenta¸c˜ao presente nas docstrings3 dos objetos. H´a v´arios modos de utiliza-lo, um dos mais ´uteis ´e chamando-o para que monte um pequeno servidor HTTP. Digite em um terminal: $ pydoc -p 1234 pydoc server ready at http://localhost:1234/ Ele criar´a um servidor que pode ser acessado pelo endere¸co http://localhost:1234. A p´agina ´e produzida automaticamente, e lista os m´odulos Python instalados. Clicando-se em um dos m´odulos pode-se visualizar quais s˜ao a fun¸c˜oes (m´etodos) dispon´ıveis, sua sintaxe e tamb´em uma breve descri¸c˜ao. 3.3.3 Nosso amigo help() O interpretador Python oferece um mecanismo de ajuda simples e eficiente. Ele provˆe uma fun¸c˜ao help(), que permite acessar parte da documenta¸c˜ao oficial Python e o PyDoc. Ele poder´a ser chamado para uma sess˜ao interativa: >>> help() (Apresenta¸c~ao) help> help> ´e o prompt do help. Tudo o que vocˆe digitar a partir de agora, ser´a interpretado pelo help. Digite ‘quit’ para sair. Para visualizar a documenta¸c˜ao docstring de um m´odulo, basta digitar o nome do m´odulo: 2 Uma propriedade, normalmente, ´e uma vari´avel. 3 As docstrings s˜ao textos inclu´ıdos no in´ıcio da defini¸c˜ao de uma classe ou fun¸c˜ao documentando-as. Veja mais detalhes na se¸c˜ao 5.4 do cap´ıtulo sobre Fun¸c˜oes, p´agina 28.
  • 13. 13 help> os Help on module os: NAME os - OS routines for Mac, DOS, NT, or Posix depending on what system we’re on. (...) Use as setas do teclado para ir para baixo/cima e aperte ‘q’ para sair. Para saber quais s˜ao os modulos dispon´ıveis, digite ‘modules’: help> modules Please wait a moment while I gather a list of all available modules... ArrayPrinter asyncore linuxaudiodev sgmllib BaseHTTPServer atexit locale sha Bastion audiodev logging (package) shelve CDROM audioop macpath shlex (...) Para procurar um m´odulo por palavra-chave, digite ‘module palavra’ e o help retornar´a uma lista de modulos que correspondem `aquela palavra. Al´em da documenta¸c˜ao dos m´odulos, o help permite que vocˆe obtenha ajuda em determinados t´opicos. Os assuntos s˜ao variados, v˜ao desde a descri¸c˜ao dos tipos b´asicos at´e como fazer o debugging de um programa. Digite ‘topics’ para ver quais s˜ao os topicos dispon´ıveis. Esqueceu qual a sintaxe do if ou de outra palavra-chave? N˜ao tema! O help tamb´em oferece um r´apido acesso `a gram´atica das palavras-chave, com uma breve descri¸c˜ao de seu uso. No help, digite ‘keywords’ para saber quais s˜ao as palavras-chaves. E para acessar sua documenta¸c˜ao, ´e s´o digitar o nome: help> if 7.1 The if statement
  • 14. 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 sess˜ao interativa. Para obter a documenta¸c˜ao de um m´odulo ou fun¸c˜ao, ´e necess´ario, primeiramente, import´a-lo: >>> 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 t´opicos, ´e preciso chamar o help deli- mitando o nome do t´opico ou palavra-chave com aspas: >>> 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 Vari´aveis e mais sintaxe b´asica Vamos continuar usando o interpretador. Agora vamos ver um pouco sobre vari´aveis. Vari´aveis s˜ao estruturas simples que servem para guardar dados. Como eu j´a disse, n˜ao ´e necess´ario declarar vari´aveis em Python. Vamos dar uma olhada ent˜ao:
  • 15. 15 >>> variavel = 1 >>> print variavel 1 >>> variavel 1 A primeira linha coloca 1 na vari´avel de nome variavel. A segunda linha mostra variavel na tela e a terceira retorna o valor de variavel. ´E muito importante fazer distin¸c˜ao entre essas duas ´ultimas. Um programador deve saber que normalmente toda “afirma¸c˜ao” que ´e feita em um programa ´e, na verdade, uma express˜ao, na maioria das linguagens. Em Python, sempre. Sempre existe uma avalia¸c˜ao do valor e um retorno do valor. O sentido pr´atico disso ´e que o segundo 1 n˜ao seria realmente mostrado na tela em um programa de verdade, ele seria retornado para nada. As opera¸c˜oes com n´umeros s˜ao feitas como em outras linguagens: >>> soma = 1 + 1 >>> print soma 2 >>> mult = soma * 3 >>> print mult 6 J´a que estamos lidando com vari´aveis, vamos ver como usar o print para coisas mais complexas. Vamos mostrar vari´aveis com ele. Existem v´arias formas. Observe: >>> 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 lembran¸cas aos programadores de C =). Eu, particularmente, prefiro a segunda forma, mas a primeira nos ensina duas coisas importantes: 1) ´e poss´ıvel
  • 16. 16 somar strings (e, veremos mais a frente, outros tipos de dados, tamb´em!) e 2) os tipos em Python s˜ao fortes, vocˆe tem que converter o inteiro para string se quiser concatenar os dois. Vamos analizar melhor a segunda. Entre aspas temos o que chamamos de formato, que ´e a defini¸c˜ao do que aparecer´a na tela. A string “%d” significa que ali ser´a colocado um inteiro. Depois do formato colocamos um separador (um “%”) e, entre parˆenteses uma lista separada por v´ırgulas, das vari´aveis que queremos que substituam os c´odigos. 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 Condi¸c˜oes e Estruturas de Repeti¸c˜ao Anets de come¸carmos a se¸c˜ao propriamente dita, ´e necess´ario entender como o Python marca o in´ıcio e o final de blocos. Aqueles acostumados com C e Pascal estar˜ao acostu- mados com coisas do tipo: if (variavel == 10) { printf ("´E 10!!!n"); } Ou if (variavel = 10) then begin writeln ("´E 10!!!"); end; O Python, para o desgosto de alguns, n˜ao tem estruturas sint´aticas de abertura e fechamento de blocos. O Python usa a indenta¸c˜ao para definir o in´ıcio e t´ermino de blocos. O problema aqui ´e que muitos programadores n˜ao tˆem h´abito de fazer uma
  • 17. 17 indenta¸c˜ao consistente. A vantagem do Python ´e que ele obriga o programador a ter uma indenta¸c˜ao consistente. =) Portanto, para come¸car um bloco de condi¸c˜ao, ´e necess´ario um n´ıvel de indenta¸c˜ao. Para indentar, pressione a tecla tab. Um exemplo: >>> variavel = 10 >>> if variavel == 10: ... print "´E 10!!" ... ´E 10!! 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 n˜ao ´e necess´ario adicionar uma linha em branco para terminar um bloco, basta n˜ao indentar a linha seguinte. N´os veremos isso melhor mais a frente. Outra coisa importante: como eu disse inicialmente, no Python toda “afirmativa” ´e uma express˜ao. Mas, diferentemente do C, o Python n˜ao aceita atribui¸c˜oes em con- textos que devem ser somente usados para express˜oes de condi¸c˜ao. Por exemplo, como vimos, o Python usa o operador “==” para compara¸c˜oes. Se eu fizer if variavel = 10 o interpretador ir´a emitir um erro, porque atribui¸c˜oes n˜ao s˜ao permitidas em um if. Vocˆe pode fazer testes de condi¸c˜ao mais complexos com Python, tamb´em: >>> a = 2 >>> b = 6 >>> if variavel == 10 and a == 2: ... print "aaa" ... elif b == 6: ... print "bbb" ... else: ... print "ccc" ... aaa
  • 18. 18 Outros operadores podem ser usados, como “or” para rela¸c˜ao entre compara¸c˜oes, e “! =”, “<”, “>”, “<=” e assim por diante, para rela¸c˜ao entre vari´aveis e valores. Um loop for (para) em Python se parece muito com o estilo Pascal de for. Ele exige um tipo de dado mais complexo, que n´os veremos mais para frente, que ´e a lista. Mas por enquanto vamos ver o b´asico do for: >>> for contador in range (0, 3): ... print contador ... 0 1 2 A fun¸c˜ao range serve para retornar uma lista que contenha o intervalo dado pelos n´umeros especificados. Preste muita aten¸c˜ao. O primeiro n´umero que vocˆe especificar sempre entra no intervalo, o ´ultimo nunca. Em matem´atica poder´ıamos representar isso assim: [0, 3[. Um while segue, essencialmente a mesma l´ogica de qualquer outro while que eu j´a vi: >>> contador = 3 >>> while contador > 0: ... print "Python!" ... contador = contador - 1 ... Python! Python! Python! 3.6 Usando um editor Sim! Vamos parar de usar o interpretador diretamente para criar nossos c´odigos e vamos passar para um editor, o que nos permitir´a salvar nossos programas. Isso n˜ao significa que vamos esquecer o interpretador daqui para frente: muito pelo contr´ario! O interpretador vai ser quem rodar´a, efetivamente, o programa criado, e tamb´em o usaremos para obter ajuda e testar pequenos peda¸cos de c´odigo enquanto programamos.
  • 19. 19 Podemos usar qualquer editor que seja capaz de salvar texto puro. Isso significa qual- quer editor, provavelmente. Muitas pessoas tˆem a id´eia errada de que ´e necess´ario um programa espec´ıfico para programar. Muitas pessoas tamb´em cometem o erro de chamar esses programas de “compiladores”. Na verdade esses programas s˜ao chamados IDE’s (Integrated Development Environmet). H´a diversos IDE’s para Python e n´os conhecere- mos um mais `a frente. No entanto, por agora, vamos escolher qualquer editor simples e come¸car! Algumas conven¸c˜oes para as quais devemos atentar: os arquivos execut´aveis Python normalmente n˜ao tˆem extens˜ao, para manter a coerˆencia com o resto do sistema. Os que tˆem usam “.py” como extens˜ao. Os arquivos podem ser “byte-compilados”4 e, nesse caso, receber˜ao a extens˜ao “.pyc”. Outra conven¸c˜ao importante ´e que todo script Python deve come¸car com uma linha contendo a “string m´agica” (#!) e a localiza¸c˜ao do interpretador, para que o sistema saiba como executar o script5 . Normalmente essa linha ser´a: #!/usr/bin/python Essa ´e uma boa hora para dizer, tamb´em, que em Python os coment´arios s˜ao feitos com o s´ımbolo #. Tudo que vier depois de um # e antes de uma quebra de linha ´e um coment´ario. Ent˜ao vamos colocar nosso primeiro exemplo para funcionar... abra seu editor e escreva o seguinte: #!/usr/bin/python # define que a variavel ’variavel’ conter´a o valor 10 variavel = 10 if variavel == 10: # se vari´avel for igual a 10 while variavel > 0: # enquanto a vari´avel for maior que 0 print variavel # mostrar a vari´avel variavel = variavel - 1 # e, claro, diminuir seu valor 4 Pr´e-processados pelo interpretador para se tornar o “assembly” usado por ele, aumentando a veloci- dade de processamento sem perder a portabilidade. 5 Isso n˜ao tem validade no Windows... somente em sistemas Unix-like, como o GNU/Linux, o MacOSX, FreeBSD, HP-UX e outros, j´a que isso ´e uma conven¸c˜ao Unix.
  • 20. 20 # fim do programa!! Os coment´arios est˜ao a´ı s´o pra vocˆe aprender a us´a-los =). Eles n˜ao s˜ao, ´e claro, necess´arios. Depois de salvar o arquivo com um nome qualquer, “teste1.py” por exemplo, abra um terminal e execute os seguintes comandos: $ chmod +x teste1.py $ ./teste1.py O primeiro comando d´a permiss˜oes de execu¸c˜ao ao arquivo, o segundo o executa. O resultado deve ser: python@beterraba:~$ ./teste1.py 10 9 (...) 1 python@beterraba:~$ Hora da brincadeira!! Pegue seu editor preferido e fa¸ca testes com o que j´a aprendeu da linguagem!
  • 21. 21 4 Tipos de Dados O Python fornece, al´em dos tipos b´asicos de dados, alguns tipos mais avan¸cados e complexos que podem ser usados com muita facilidade. Quem j´a teve que usar uma lista encadeada sabe o quanto ´e complicado implementar esse tipo de estrutura do zero. O Python facilita muito as coisas, e n´os vamos explorar essas capacidades agora! 4.1 Inteiros e Ponto flutuante Lidar com n´umeros em Python ´e bem f´acil. Como j´a vimos, o Python detecta o tipo do dado no momento em que ele ´e atribu´ıdo `a vari´avel. Isso significa que: >>> 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 ´e muito simples. O que faz com que o Python “detecte” o tipo string s˜ao as aspas, simples ou duplas. Vejamos: >>> 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 ´e um objeto. Isso significa que uma string tem m´etodos! Sim! Observe:
  • 22. 22 >>> nome = "kov" >>> nome.upper () ’KOV’ >>> "kov".upper () ’KOV’ Note, no entanto, uma coisa muito importante: uma string em Python ´e sempre uma constante! Vocˆe nunca modifica uma string, o que vocˆe pode fazer ´e reatribu´ı-la. Isso significa que se vocˆe quiser que a string continue em letras mai´usculas dali para frente vocˆe deve fazer “nome = nome.upper ()”. N´os veremos mais sobre como conhecer os m´etodos dispon´ıveis. Para acessar partes espec´ıficas da string, vocˆe pode usar a nota¸c˜ao de “fatias”. ´E importante entender bem essa nota¸c˜ao, porque ela ´e muito ´util em v´arias oportunidades 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 modificada dinamicamente e de tupla uma lista im´ovel. Vamos ver as opera¸c˜oes principais com listas: >>> lista = [] # os [] fazem com que ’lista’ seja iniciada como lista >>> lista.append (’kov’) >>> lista = [’kov’, ’spuk’, ’o_0’] >>> len(lista)
  • 23. 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 opera¸c˜oes b´asicas de lista encadeada s˜ao contempladas pela imple- menta¸c˜ao de listas do Python. A terceira linha mostra como inicializar uma vari´avel com uma lista pr´e-criada. A quarta mostra como obter o tamanho da lista usando a fun¸c˜ao len() 1 . Nesse exemplo usamos strings na lista, mas uma lista pode conter qualquer tipo de dado, inclusive listas, possibilitando a cria¸c˜ao simples de ´arvores, inclusive. Algo importante de se notar ´e que d´a para usar a lista do Python como pilha, usando os m´etodos append() e pop(). Outra deriva¸c˜ao importante desse exemplo ´e ver que uma lista em Python ´e indexada, como um vetor. Podemos usar “lista[0]” para acessar o primeiro ´ıtem da lista2 , e podemos usar esse ´ındice para inserir n´os em posi¸c˜oes espec´ıficas. As listas tˆem outros m´etodos de extermo interesse, como o sort(), que serve para ordenar a lista. ´E sentar e explorar as possibilidades! As tuplas funcionam quase do mesmo modo que as listas, com a excess˜ao de que s˜ao listas que n˜ao s˜ao modific´aveis. Elas s˜ao bastante usada como retorno de algumas fun¸c˜oes, portanto ´e bom explor´a-las. Vocˆe reconhece uma tupla por sua similaridade com uma lista, mas ao inv´es de usar [] uma tupla usa parˆenteses. Um exemplo r´apido: >>> tupla = (1, 35) >>> tupla[0] 1 >>> tupla (1, 35) 1 Note que a fun¸c˜ao len() pode ser usada em outros tipos de dados, como strings, por exemplo 2 Em Python, como em C, ´ındices sempre come¸cam do 0.
  • 24. 24 4.4 Dicion´arios Quem j´a ouviu falar de Hash tables vai se sentir familiarizado com os dicion´arios rapi- damente. Os dicion´arios em Python s˜ao, literalmente, estruturas de dados que permitem “traduzir” uma chave para um valor. Seu uso ´e muito simples: >>> linguagem = {} >>> linguagem[’nome’] = ’Python’ >>> linguagem[’tipo’] = ’scripting’ >>> linguagem[2] = 100 >>> linguagem[2] 100 >>> linguagem[’tipo’] ’scripting’ 4.5 Convers˜ao / Casting Python usa tipagem forte. Isso significa que se uma vari´avel cont´em um inteiro ela n˜ao pode simplesmente ser usada como se fosse uma vari´avel de ponto flutuante. Para esse tipo de coisas ´e necess´ario fazer uma convers˜ao. Aqui est˜ao exemplos: >>> a = 10 >>> str (a) ’10’ >>> float (a) 10.0 >>> int (’25’) 25
  • 25. 25 5 Fun¸c˜oes 5.1 Sintaxe B´asica Fun¸c˜oes em python tem uma sintaxe muito parecida com qualquer outra linguagem. O uso de parˆenteses ´e obrigat´orio, mesmo que n˜ao aja argumentos, ao contr´ario de algumas, com a ´unica excess˜ao da fun¸c˜ao interna print. Declarar uma fun¸c˜ao em Python ´e muito simples: >>> def minha_funcao (argumento): ... print argumento ... >>> minha_funcao (’123kokoko!’) 123kokoko! Como pode ser visto, o bloco que implementa a fun¸c˜ao tamb´em ´e demarcado pela indenta¸c˜ao. 5.2 Passagem Avan¸cada de Argumentos Os argumentos n˜ao tˆem tipo declarado, o que d´a uma grande flexibilidade. Os ar- gumentos podem ter valores padr˜ao, tamb´em, e vocˆe pode dar valores espec´ıficos para argumentos opcionais fora da localiza¸c˜ao deles, nesses casos. Vejamos: >>> def mostra_informacoes (obrigatorio, nome = ’kov’, idade=20): ... print "obrigatorio: %snnome: %snidade: %d" % (obrigatorio, nome, idade) ... >>> mostra_informacoes (’123’) obrigatorio: 123
  • 26. 26 nome: kov idade: 20 >>> mostra_informacoes (’123’, idade = 10) obrigatorio: 123 nome: kov idade: 10 5.3 Retorno da fun¸c˜ao Para retornar um (ou mais) valores em uma fun¸c˜ao basta usar a declara¸c˜ao return. Vocˆe pode, inclusive, retornar diversos valores e, como na passagem de parˆametros, n˜ao precisa declarar o tipo de dado retornado: >>> def soma_e_multiplica (x, y): ... a = x + y ... b = x * y ... return a, b ... >>> c, d = soma_e_multiplica (4, 5) >>> print c 9 >>> print d 20 5.4 Documentando Uma caracter´ıstica interessante do Python ´e a possibilidade de documentar c´odigo no pr´oprio c´odigo, sem usar ferramentas externas. Basta colocar uma string envolvida por sequˆencias de trˆes aspas: >>> def funcao (x): ... """ ... funcao (x) -> inteiro ... ... recebe um inteiro, multiplica ele por si mesmo
  • 27. 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. 28 6 Classes Classes s˜ao como id´eias. S˜ao um dos pilares da orienta¸c˜ao a objetos. Se pensarmos como fil´osofos podemos associar um objeto (ou uma instˆancia, o que ´e mais correto no caso do Python) a um ente concreto, um indiv´ıduo. O exemplo cl´assico ´e pensar em ser humano, uma classe, e Jos´e da Silva, um exemplar dessa classe, uma instˆancia dessa classe. 6.1 Criando estruturas em Python No Pascal s˜ao conhecidos como registros, no C como estruturas ou structs. O Python por incr´ıvel que pare¸ca n˜ao tem uma estrutura de dado como essa. Para implementar algo similar a um registro ´e necess´ario usar uma classe. A sintaxe ´e muito simples: >>> class registro: ... nome = "" ... idade = 0 ... >>> r = registro () >>> r.nome = "kov" >>> r.idade = 10 >>> print r.nome kov A ´unica diferen¸ca existente entre uma classe e uma estrutura, quando se usa assim, ´e que vocˆe pode criar novos “membros” dentro da classe a qualquer momento, bastando atribuir algo.
  • 29. 29 6.2 M´etodos Definir m´etodos em classes Python ´e uma quest˜ao de definir uma fun¸c˜ao dentro da classe (a indenta¸c˜ao marca o bloco, lembre-se). O importante ´e que o nome que vocˆe passar como primeiro argumento para um m´etodo representa o pr´oprio objeto (an´alogo ao this de outras linguagens), mas n˜ao precisa ser passado como argumento quando for chamar o m´etodo. Um exemplo: >>> class humano: ... def falar (self, oque): ... self.print (oque) ... def imprimir (self, oque): ... print oque ... >>> eu = humano () >>> eu.falar ("qualquer coisa") qualquer coisa Existe um m´etodo especial para toda classe, chamado init . Esse m´etodo ´e an´alogo ao construtor de outras linguagens. Ele ´e chamado quando vocˆe instancia um objeto, e os argumentos passados na chamada de instancia¸c˜ao s˜ao passados para esse m´etodo. 6.3 Heran¸ca O Python permite heran¸ca de classes. Podemos, ent˜ao, definir uma nova classe que herda as caracter´ısticas de registro e humano, que definimos acima assim: >>> class coisa (registro,humano): ... def coisar (self): ... print "eu coiso, tu coisas, ele coisa..." ... >>> c = coisa () >>> c.falar ("abc") abc ´E claro, ´e poss´ıve herdar uma classe apenas, bastando colocar seu nome entre parˆenteses.
  • 30. 30 7 Arquivos / IO Lidar com arquivos em Python ´e coisa muito simples. Uma das primeiras coisas que eu procuro fazer quando aprendo uma linguagem ´e abrir, ler e gravar em um arquivo, ent˜ao vamos ver aqui como fazer. Um arquivo aberto ´e um objeto, para criar esse objeto usando a fun¸c˜ao open, que ser´a muito familiar para programadores da linguagem C: >>> arq = open (’/tmp/meuarquivo.txt’, ’w’) >>> arq.write (’meu teste de escrever em arquivonmuito legal’) >>> arq.close () O primeiro argumento de open ´e o nome do arquivo, e o segundo ´e o modo como ele ser´a aberto. Os modos poss´ıveis s˜ao: “w” para apagar o que existir e abrir para escrita (cria o arquivo se n˜ao existir); “w+” faz o mesmo que “w”, mas abre para escrita e leitura; “r”, abre para leitura; “a” abre o arquivo para escrita, mantendo o conte´udo e posiciona o cursor no final do arquivo; “a+” faz o mesmo que “a”, mas abre para leitura e escrita. O m´etodo write da instˆancia do objeto arq est´a sendo usado para gravar a string no arquivo. Vocˆe pode usar a mesma nota¸c˜ao usada com print entre os parˆametros do m´etodo (na verdade vocˆe pode usar a nota¸c˜ao do print em qualquer lugar que receba uma string). Para ler um arquivo: >>> arq = open (’/tmp/meuarquivo.txt’) >>> arq.read () ’meu teste de escrever em arquivonmuito legal’ >>> arq.readline () ’’ >>> arq.seek(0) >>> arq.readline ()
  • 31. 31 ’meu teste de escrever em arquivon’ Como podemos ver, n˜ao ´e necess´ario especificar o modo de abertura quando s´o se quer ler. A fun¸c˜ao open assume o segundo argumento como sendo “r”. O m´etodo read() lˆe o arquivo completo, como podemos ver, e qualquer tentativa de leitura resulta em uma string vazia, como vemos na quarta linha. O m´etodo seek() serve para posicionar o cursor no arquivo e a readline() serve para ler uma linha apenas. O m´etodo close() seria usado nesse caso, tamb´em.