Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Curso Python, Notas de estudo de Design

É muito bom este curso e um pouco complexo, mas é muito bom e ele é só o básico.

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 13/08/2010

alax-ricard-7
alax-ricard-7 🇧🇷

5

(1)

6 documentos

1 / 31

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Gustavo Noronha Silva
Curso de Python
F´
orum Mineiro de Software Livre
Montes Claros
setembro/2003
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f

Pré-visualização parcial do texto

Baixe Curso Python e outras Notas de estudo em PDF para Design, somente na Docsity!

Gustavo Noronha Silva

Curso de Python

F´orum Mineiro de Software Livre

Montes Claros setembro/

Sum´ario

Nota de Copyright

Nota de Copyright

Copyright ( c©) 2003, Gustavo Noronha Silva

Esse curso est´a licenciado sob a GNU FDL (Free Documentation License), fornecida pela Free Software Foundation.

Agradecimentos

Muito obrigado a Allan Douglas pela grande ajuda na escrita desse curso.

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.

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.

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’

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 objeto^1. 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!

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

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:

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= >>> 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

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

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 script^5. 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.

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!