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

2010

Compartilhado em 13/08/2010

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

5

(1)

6 documentos

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órum Mineiro de Software Livre Montes Claros setembro/2003 Sumário Nota de Copyright Agradecimentos 1 Introdução p. 6 2 Revisão de Conceitos p. 7 2.1 Linguagem Interpretada vs Compilada . . . . . . . . . . . . . . . . . . p. 7 2.2 Tipagem Forte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 7 2.3 Orientação a Objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 8 3 Mão na massa! p. 9 3.1 O Interpretador Python . . . . . . . . . . . . . . . . . . . . . . . . . . p. 9 3.2 Módulos, as bibliotecas do Python . . . . . . . . . . . . . . . . . . . . . p. 10 3.3 Se virando no Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 11 3.3.1 A função dir() . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 11 3.3.2 PyDoc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 12 3.3.3 Nosso amigo help() . . . . . . . . . . . . . . . . . . . . . . . . . p. 12 3.4 Variáveis e mais sintaxe básica . . . . . . . . . . . . . . . . . . . . . . . p. 15 3.5 Condições e Estruturas de Repetição . . . . . . . . . . . . . . . . . . . p. 16 3.6 Usando um editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 19 4 Tipos de Dados p. 22 4.1 Inteiros e Ponto flutuante . . . . . . . . . . . . . . . . . . . . . . . . . p. 22 Agradecimentos Muito obrigado a Allan Douglas <allan douglas@gmx.net> pela grande ajuda na escrita desse curso. 6 1 Introdução A programação nos dias atuais está centrada em uma briga de gigantes que pretendem impôr seus padrões para substituir a linguagem conhecida como “padrão da indústria”, C++. Correndo por fora estão linguagens relativamente pouco conhecidas e aclamadas, tal- vez por serem fruto do esforço de grandes mestres da computação (como as primeiras linguagens) e não por grandes empresas. Python é uma dessas linguagens e traz uma simplicidade indiscut́ıvel, ao mesmo tempo em que, apesar de ser uma linguagem interpretada, é extremamente veloz. Aqueles que já programam há tempos com linguagens cheias de controle sintático vão certamente se sentir perdidos num primeiro contato, mas perceberão que Python se adapta muito bem ao modelo mental do programador e vai se sentir falando com a máquina em pouco tempo. 7 2 Revisão de Conceitos Python é uma linguagem simples, mas é constrúıda em uma base teórica e técnica muito complexa. Ela eleva a orientação a objetos, em alguns casos, ao extremo. Vamos dar uma revisada em alguns conceitos importantes que nos subsidiarão no aprendizado de Python. 2.1 Linguagem Interpretada vs Compilada Python, como já foi dito, é uma linguagem interpretada, como Perl, Shell Script, Batch Scripts, entre outras. Isso significa que não é necessária a compilação do código para que ele seja executado e isso trás várias vantagens e desvantagens embutidas. Linguagens compiladas normalmente são mais rápidas, porque o código já está num formato que o computador entende. Linguagens interpretadas costumam funcionar de uma ou outra maneira: • Compilação Just-In-Time • Interpretação pura ou em Bytecode O Python pode funcionar das duas formas. Vamos usar mais o segundo modelo durante o curso, mas não se esqueça de conferir o compilador JIT do Python. 2.2 Tipagem Forte Python é uma linguagem de tipagem forte. Isso significa que se uma variável adquire um determinado tipo não 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ável. 10 O >>> é o prompt do interpretador. Podemos sair programando em Python agora mesmo. O interpretador vai executar o código que escrevermos na hora, e poderemos ver o resultado. Já que o interpretador nos disse “oi” não sejamos mal-educados, vamos responder a ele, digitando o seguinte: >>> print ’Olá, Python!’ Olá, Python! Ótimo! Podemos ver que ‘print’ serve para mostrar mensagens na tela. Você pode usar aspas simples ou duplas para delimitar a mensagem. A função ‘print’ é uma excessão entre as funções do Python, já que ela não precisa de parenteses. Note, também, que não há um caractere delimitador da chamada (como “;” em C e Pascal). 3.2 Módulos, as bibliotecas do Python No Python chamamos as coleções de código que fornecem extensões para a linguagem de módulos. Pode-se fazer uma associação às bibliotecas usadas em C (e, na verdade, algumas vezes os módulos são bibliotecas). Para usá-los, temos que importá-los. Mas cuidado com a balança comercial, hein! (duh) O Python procura sempre proteger o chamado espaço de nomes e, portanto, sempre que você importar um módulo terá de usar seu nome para chamar funções e acessar propriedades que estão dentro dele. Isso pode ser familiar para quem lida com Java ou C#. Vejamos as três formas de importar módulos: >>> 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ódulo como um todo, mas exige que sempre que você quiser acessar algo que pertence ao módulo você tenha que adicionar “os.” antes da função ou propriedade. O segundo, “from os import getcwd”, importa somente aquela função determinada; isso pode usar menos memória e não é mais necessário usar “os.” antes de chamar a função; a terceira forma é como a segunda, mas ao invés de importar uma só função, importa todas. 3.3 Se virando no Python Este documento não pretende ser uma referência completa sobre o Python. Então, como obter ajuda? Como descobrir quais são as funcionalidades presentes nesta lingua- gem? Como “se virar”? 3.3.1 A função dir() O Python tem uma função chamada dir(). Ela fornece à linguagem a capacidade de reflexão, presente em linguagens como Java. Isso significa que você pode listar o conteúdo de módulos 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’, 1Módulos são objetos, depois de importados, e quase tudo em Python é um objeto, até uma string! 12 ’splitlines’, ’startswith’, ’strip’, ’swapcase’, ’title’, ’translate’, ’upper’, ’zfill’] Isso significa que o espaço de nomes builtins , carrega aquelas funções ou proprie- dades2, que o módulo sys tem aquelas listadas, e que você pode usar aqueles métodos em qualquer string. 3.3.2 PyDoc pydoc é um software que acompanha a distribuição oficial do Python. Ele permite acesso à documentação presente nas docstrings3 dos objetos. Há vários modos de utiliza-lo, um dos mais úteis é 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á um servidor que pode ser acessado pelo endereço http://localhost:1234. A página é produzida automaticamente, e lista os módulos Python instalados. Clicando-se em um dos módulos pode-se visualizar quais são a funções (métodos) dispońıveis, sua sintaxe e também uma breve descrição. 3.3.3 Nosso amigo help() O interpretador Python oferece um mecanismo de ajuda simples e eficiente. Ele provê uma função help(), que permite acessar parte da documentação oficial Python e o PyDoc. Ele poderá ser chamado para uma sessão interativa: >>> help() (Apresentaç~ao) help> help> é o prompt do help. Tudo o que você digitar a partir de agora, será interpretado pelo help. Digite ‘quit’ para sair. Para visualizar a documentação docstring de um módulo, basta digitar o nome do módulo: 2Uma propriedade, normalmente, é uma variável. 3As docstrings são textos inclúıdos no ińıcio da definição de uma classe ou função documentando-as. Veja mais detalhes na seção 5.4 do caṕıtulo sobre Funções, página 28. 15 >>> variavel = 1 >>> print variavel 1 >>> variavel 1 A primeira linha coloca 1 na variável de nome variavel. A segunda linha mostra variavel na tela e a terceira retorna o valor de variavel. É muito importante fazer distinção entre essas duas últimas. Um programador deve saber que normalmente toda “afirmação” que é feita em um programa é, na verdade, uma expressão, na maioria das linguagens. Em Python, sempre. Sempre existe uma avaliação do valor e um retorno do valor. O sentido prático disso é que o segundo 1 não seria realmente mostrado na tela em um programa de verdade, ele seria retornado para nada. As operações com números são feitas como em outras linguagens: >>> soma = 1 + 1 >>> print soma 2 >>> mult = soma * 3 >>> print mult 6 Já que estamos lidando com variáveis, vamos ver como usar o print para coisas mais complexas. Vamos mostrar variáveis com ele. Existem várias formas. Observe: >>> soma = 2 + 2 >>> print "A soma é: " + str(soma) A soma é: 4 >>> print "A soma é, na verdade: %d" % (soma) A soma é, na verdade: 4 A primeira forma deve ser comum a quem programa em VB ou PHP, por exemplo. A segunda deve causar boas lembranças aos programadores de C =). Eu, particularmente, prefiro a segunda forma, mas a primeira nos ensina duas coisas importantes: 1) é posśıvel 16 somar strings (e, veremos mais a frente, outros tipos de dados, também!) e 2) os tipos em Python são fortes, você 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 é a definição do que aparecerá na tela. A string “%d” significa que ali será colocado um inteiro. Depois do formato colocamos um separador (um “%”) e, entre parênteses uma lista separada por v́ırgulas, das variáveis que queremos que substituam os códigos. 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ções e Estruturas de Repetição Anets de começarmos a seção propriamente dita, é necessário entender como o Python marca o ińıcio e o final de blocos. Aqueles acostumados com C e Pascal estarão acostu- mados com coisas do tipo: if (variavel == 10) { printf ("É 10!!!\n"); } Ou if (variavel = 10) then begin writeln ("É 10!!!"); end; O Python, para o desgosto de alguns, não tem estruturas sintáticas de abertura e fechamento de blocos. O Python usa a indentação para definir o ińıcio e término de blocos. O problema aqui é que muitos programadores não têm hábito de fazer uma 17 indentação consistente. A vantagem do Python é que ele obriga o programador a ter uma indentação consistente. =) Portanto, para começar um bloco de condição, é necessário um ńıvel de indentação. Para indentar, pressione a tecla tab. Um exemplo: >>> variavel = 10 >>> if variavel == 10: ... print "É 10!!" ... É 10!! Duas coisas importantes a serem observadas: 1) quando o Python espera que você 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ão é necessário adicionar uma linha em branco para terminar um bloco, basta não indentar a linha seguinte. Nós veremos isso melhor mais a frente. Outra coisa importante: como eu disse inicialmente, no Python toda “afirmativa” é uma expressão. Mas, diferentemente do C, o Python não aceita atribuições em con- textos que devem ser somente usados para expressões de condição. Por exemplo, como vimos, o Python usa o operador “==” para comparações. Se eu fizer if variavel = 10 o interpretador irá emitir um erro, porque atribuições não são permitidas em um if. Você pode fazer testes de condição mais complexos com Python, também: >>> a = 2 >>> b = 6 >>> if variavel == 10 and a == 2: ... print "aaa" ... elif b == 6: ... print "bbb" ... else: ... print "ccc" ... aaa 20 # fim do programa!! Os comentários estão áı só pra você aprender a usá-los =). Eles não são, é claro, necessários. 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á permissões de execução 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ça testes com o que já aprendeu da linguagem! 21 4 Tipos de Dados O Python fornece, além dos tipos básicos de dados, alguns tipos mais avançados e complexos que podem ser usados com muita facilidade. Quem já teve que usar uma lista encadeada sabe o quanto é complicado implementar esse tipo de estrutura do zero. O Python facilita muito as coisas, e nós vamos explorar essas capacidades agora! 4.1 Inteiros e Ponto flutuante Lidar com números em Python é bem fácil. Como já vimos, o Python detecta o tipo do dado no momento em que ele é atribúıdo à variável. 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 é muito simples. O que faz com que o Python “detecte” o tipo string são as aspas, simples ou duplas. Vejamos: >>> meu_nome = "Gustavo" >>> meu_nick = ’kov’ >>> print "Meu nome é: %s, meu nick é %s!" % (meu_nome, meu_nick) Meu nome é: Gustavo, meu nick é kov! Como disse anteriormente, quase tudo em Python é um objeto. Isso significa que uma string tem métodos! Sim! Observe: 22 >>> nome = "kov" >>> nome.upper () ’KOV’ >>> "kov".upper () ’KOV’ Note, no entanto, uma coisa muito importante: uma string em Python é sempre uma constante! Você nunca modifica uma string, o que você pode fazer é reatribúı-la. Isso significa que se você quiser que a string continue em letras maiúsculas dali para frente você deve fazer “nome = nome.upper ()”. Nós veremos mais sobre como conhecer os métodos dispońıveis. Para acessar partes espećıficas da string, você pode usar a notação de “fatias”. É importante entender bem essa notação, porque ela é muito útil em várias 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óvel. Vamos ver as operações principais com listas: >>> lista = [] # os [] fazem com que ’lista’ seja iniciada como lista >>> lista.append (’kov’) >>> lista = [’kov’, ’spuk’, ’o_0’] >>> len(lista) 25 5 Funções 5.1 Sintaxe Básica Funções em python tem uma sintaxe muito parecida com qualquer outra linguagem. O uso de parênteses é obrigatório, mesmo que não aja argumentos, ao contrário de algumas, com a única excessão da função interna print. Declarar uma função em Python é muito simples: >>> def minha_funcao (argumento): ... print argumento ... >>> minha_funcao (’123kokoko!’) 123kokoko! Como pode ser visto, o bloco que implementa a função também é demarcado pela indentação. 5.2 Passagem Avançada de Argumentos Os argumentos não têm tipo declarado, o que dá uma grande flexibilidade. Os ar- gumentos podem ter valores padrão, também, e você pode dar valores espećıficos para argumentos opcionais fora da localização deles, nesses casos. Vejamos: >>> def mostra_informacoes (obrigatorio, nome = ’kov’, idade=20): ... print "obrigatorio: %s\nnome: %s\nidade: %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ção Para retornar um (ou mais) valores em uma função basta usar a declaração return. Você pode, inclusive, retornar diversos valores e, como na passagem de parâmetros, não 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 caracteŕıstica interessante do Python é a possibilidade de documentar código no próprio código, sem usar ferramentas externas. Basta colocar uma string envolvida por sequências de três 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 30 7 Arquivos / IO Lidar com arquivos em Python é coisa muito simples. Uma das primeiras coisas que eu procuro fazer quando aprendo uma linguagem é abrir, ler e gravar em um arquivo, então vamos ver aqui como fazer. Um arquivo aberto é um objeto, para criar esse objeto usando a função open, que será muito familiar para programadores da linguagem C: >>> 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 será aberto. Os modos posśıveis são: “w” para apagar o que existir e abrir para escrita (cria o arquivo se não 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údo e posiciona o cursor no final do arquivo; “a+” faz o mesmo que “a”, mas abre para leitura e escrita. O método write da instância do objeto arq está sendo usado para gravar a string no arquivo. Você pode usar a mesma notação usada com print entre os parâmetros do método (na verdade você pode usar a notação 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 arquivo\nmuito legal’ >>> arq.readline () ’’ >>> arq.seek(0) >>> arq.readline () 31 ’meu teste de escrever em arquivo\n’ Como podemos ver, não é necessário especificar o modo de abertura quando só se quer ler. A função open assume o segundo argumento como sendo “r”. O método read() lê o arquivo completo, como podemos ver, e qualquer tentativa de leitura resulta em uma string vazia, como vemos na quarta linha. O método seek() serve para posicionar o cursor no arquivo e a readline() serve para ler uma linha apenas. O método close() seria usado nesse caso, também.
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved