Slides do minicurso de Python ministrado na Semana de computação da SOCIESC em outubro de 2008.
- 1. Python: a primeira mordida Marco Andr Lopes Mendes
[email_address]
2. Crditos Esses conjunto de slides foi desenvolvido a partir do
material de: Luciano Ramalho[email_address] 3. Em vez deHello
World... fromdatetimeimportdatetime fromtimeimportsleep whileTrue:#
rodar para sempre hora = datetime.now() printhora.strftime(
'%H:%M:%S' )sleep(1)# aguardar 1 segundo 4. Blocos por endentao
dois-pontos marca o incio do bloco retorno ao nvel anterior
deindentao marca o final do bloco indentao dentro do bloco deve ser
constante* * por conveno, usa-se 4 espaos por nvel (mas basta ser
consistente) 5. Blocos
- Todos os comandos que aceitam blocos:
- Se o bloco tem apenas um comando, pode-se escrever tudo em uma
linha:
-
- ifn < 0:print 'Valor invlido'
6. Comentrios
- O smbolo#indica que o texto partir daquele ponto e at o final
da linha deve ser ignorado pelo interpretadorpython
-
- exceto quando # aparece em uma string
- Para comentrios de vrias linhas, usa-se trs aspas simples ou
duplas (isso cria uma doc string e no ignorada pelopython , mas
usada para documentar)
-
- """ Minha terra tem palmeiras,
-
- As aves, que aqui gorjeiam,
7. Tipos de dados bsicos
- Nmeros:int, long, float, complex
- Listas e tuplas:list, tuple
- Booleanos:bool (True, False)
8. Nmeros inteiros
- int : usualmente inteiros de 32 bits
- long : alcance limitado apenas pela memria
- ATENO:a diviso entreinteiros em Python < 3.0
sempreretornaoutro inteiro
- Python promovedeint paralong automaticamente
9. Outros nmeros
- float : ponto-flutuante de 32 bits
- Construtores oufunes de converso:
10. Operadores numricos
-
- bsicos:+ - * / **(o ltimo: potenciao)
-
- aritmtica de inteiros:% //(resto e diviso)
12. Operadores booleanos
15. Strings unicode
- Padro universal, compatvel com todos os idiomas existentes
(portugus, chins, grego, hndi, rabe, suali etc.)
- Cada caractere representado pordois bytes
- Utilize o prefixou para denotar umaconstante unicode:u'ma'
16. Codificao em scripts
- As constantes str ou unicode so interpretadas segundo a
codificao declarada num comentrio especial no incio do arquivo
.py:
17. Como gerar strings com variveis embutidas
- Operador de interpolao:f % tupla
- Tipos de converso mais comuns:
-
-
- %s ,%f ,%d : string, float, inteiro decimal
-
- Google:Python String Formatting Operations
-
- >>> f = 'O%sest cotado a R$%0.2f .'%( m , t )
-
- OEuroest cotado a R$2.74 .
18. Algumas funes com strings
- chr(n) :retorna uma string com um caractere de 8-bits cujo
cdigo n
- unichr(n) :retorna uma string com um caractere Unicodecujo
cdigo n
- ord(c) : retorna o cdigo numrico do caracterec(pode ser
Unicode)
- repr(x) : converso de objeto para sua representao explcita
emPython
- len(s) : nmero de caracteres da string
19. Alguns mtodos de strings
-
- retira os brancos (espaos, tabs e newlines) da frente e de trs
des(+ parmetros)
-
- rstripelstripretiram direita e esquerda
- s.upper(), s.lower(), s.capitalize(), s.title()
-
- converte todas maisculas, todas minsculas, primeira maiscula
por palavra, primeira maiscula da string
- s.isdigit(), s.isalnum(), s.islower()...
-
- testa se a string contm somente dgitos, ou somente dgitos e
letras ou s minsculas
20. Buscando substrings
- s.startswith(sub), s.endswith(sub)
-
- scomea ou termina comsub ?
- s.find(sub), s.index(sub)
-
- posio desubems(sesubno existe ems ,findretorna
-1,indexsinalizaValueError )
-
- rfinderindexcomeam pela direita
-
- substitui as ocorrncias desub1porsub2
21. Aprendendo a aprender
- Use o interpretador interativo!
- Determinar o tipo de um objeto:
- Ver docs de uma classe ou comando
- Obter uma lista de (quase) todos os atributos de um objeto
- Listar smbolos do escopo corrente
22. Listas
- Listas so colees de itens heterogneos que podem ser acessados
sequencialmente ou diretamente atravs de um ndice numrico.
- Constantes do tipo lista so delimitadas por colchetes[] .
-
- c = ['casa',43,b,[9,8,7],u'coisa']
23. Listas
- O mtodolista.append(i) usado para colocar um novo itemi na
lista.
- O mtodolista.extend(l) inclui todos os itens delno final da
lista. O resultado o mesmo da expresso abaixo, s que mais eficiente
pois evita copiar todos os itens da lista:
- Funo embutidalen()retorna o nmero de itens da lista:
-
- len(a), len(b), len(c) # 0, 4, ?
24. Listas
- O mtodolista.sort()ordena os itens de forma ascendente.
- O mtodolista.reverse()inverte a ordem dos itens dentro da
prpria lista.
- A funo embutidasorted(l)devolve uma lista com os itens de uma
lista ou sequncia qualquer ordenados
- A funo embutidareversed(l) devolve um iterador para percorrer a
sequncia em ordem inversa (do ltimo para o primeiro item).
25. Operaes com itens de listas
- Outros mtodos da classelist :
-
- lista.insert(posicao, elemento)
-
- lista.pop()# +params: ver doc
-
- lista.index(elemento) # +params: ver doc
26. Uma funo para gerar listas
- range([inicio,] fim[, passo])
-
- Retorna uma progresso aritmtica de acordo com os argumentos
fornecidos
-
- range(8)# [0,1,2,3,4,5,6,7]
-
- range(1,7)# [1,2,3,4,5,6]
27. Expresses para gerar listas
- List comprehensions ou abrangncias de listas
- Produz uma lista a partir de qualquer objeto itervel
- Economizam loops explcitos
28. Abrangncia de listas
- Sintaxe emprestada da linguagem funcional Haskell
- Processar todos os elementos:
29.
- Filtrar alguns elementos:
-
- l3 = [n for n in l if n > 0]
-
- l4 = [n*10 for n in l if n > 0]
Abrangncia de listas 30. Produto cartesiano
- Usando dois ou mais comandosfordentro de uma list
comprehension
>>> qtds = [2,6,12,24] >>> frutas =
['abacaxis', 'bananas', 'caquis'] >>> [(q,f) for q in qtds
for f in frutas] [(2, 'abacaxis'), (2, 'bananas'), (2,
'caquis'),(6, 'abacaxis'), (6, 'bananas'), (6,
'caquis'),(12,'abacaxis'), (12,'bananas'),
(12,'caquis'),(24,'abacaxis'), (24,'bananas'), (24,'caquis')] 31.
Produto cartesiano (2) >>> naipes = 'copas ouros espadas
paus'.split() >>> cartas = 'A 2 3 4 5 6 7 8 9 10 J Q
K'.split() >>> baralho = [(c, n) for n in naipes for c in
cartas] >>> baralho [('A', 'copas'), ('2', 'copas'), ('3',
'copas'), ('4', 'copas'), ('5', 'copas'), ('6', 'copas'), ('7',
'copas'), ('8', 'copas'),('9', 'copas'), ('10', 'copas'), ('J',
'copas'), ('Q', 'copas'),('K', 'copas'), ('A', 'ouros'), ('2',
'ouros'), ('3', 'ouros'),('4', 'ouros'), ('5', 'ouros'), ('6',
'ouros'), ('7', 'ouros'),('8', 'ouros'), ('9', 'ouros'), ('10',
'ouros'), ('J', 'ouros'),('Q', 'ouros'), ('K', 'ouros'), ('A',
'espadas'), ('2', 'espadas'),('3', 'espadas'), ('4', 'espadas'),
('5', 'espadas'), ('6', 'espadas'), ('7', 'espadas'), ('8',
'espadas'), ('9', 'espadas'), ('10', 'espadas'), ('J',
'espadas'),('Q', 'espadas'), ('K', 'espadas'), ('A', 'paus'), ('2',
'paus'),('3', 'paus'), ('4', 'paus'), ('5', 'paus'), ('6',
'paus'),('7', 'paus'), ('8', 'paus'), ('9', 'paus'), ('10',
'paus'),('J', 'paus'), ('Q', 'paus'), ('K', 'paus')] >>>
len(baralho) 52 32. Tuplas
- Tuplas so sequncias imutveis
-
- no possvel modificar as referncias contidas na tupla
- Tuplas constantes so representadas como sequncias de itens
entre parnteses
-
- em certos contextos os parnteses em redor das tuplas podem ser
omitidos
33. Converses entre listas e strings
-
- retorna uma lista de strings, quebrando snos brancos ou no
separador fornecido
-
- maxlimita o nmero de quebras
-
- retorna todas as strings contidas na lista l"coladas" com a
strings( comum quesseja uma string vazia)
-
- retornascomo uma lista de caracteres
34. Tuplas
- Atribuies mltiplas utilizam tuplas
-
- posicoes = [(1,2),(2,2),(5,2),(0,3)]
-
- #outro jeito de percorrer
35. Operaes com sequncias
- Sequncias so colees ordenadas
-
- nativamente: strings, listas, tuplas, buffers
-
- s[-i] acesso a um item pelo final
-
- s*n ncpias desconcatenadas
-
- i not in s teste de incluso negativo
36. Fatiamento de sequncias
- s[a:b] cpia dea(inclusive) atb(exclusive)
- s[a:] cpia a partir dea(inclusive) at o final
- s[:b] cpia do incio atb(exclusive)
- s[a:b:n] cpia de nemnitens
-
- vlida apenas em sequncias mutveis
37. Funes nativas para sequncias
-
- valores mnimo e mxi mo contidos em s
-
- retorna um iterador para percorrer os elementos em ordem
ascendente
-
- retorna um iterador para percorrer os elementos do ltimo ao
primeiro
38. Dicionrios
- Dicionrios so colees de valores identificados por chaves
nicas
-
- Outra definio: dicionrios so colees de pareschave:valorque
podem ser recuperados pela chave
- Dicionrios constantes so representados assim:
-
- uf={'SC':'Santa Catarina', 'PR':'Paran', 'RS':'Rio Grande do
Sul'}
39. Dicionrios: caractersticas
- As chaves so sempre nicas
- As chaves tm que ser objetos imutveis
-
- nmeros, strings e tuplas so alguns tipos de objetos
imutveis
- Qualquer objeto pode ser um valor
- A ordem de armazenagem das chaves indefinida
- Dicionrios so otimizados para acesso direto a um item pela
chave, e no para acesso sequencial em determinada ordem
40. Dicionrios: operaes bsicas
- Criar um dicionrio vazio:
- Acessar um item do dicionrio:
- Adicionar ou sobrescrever um item:
41. Alguns mtodos de dicionrios
- Verificar a existncia de uma chave:
- Obter listas de chaves, valores e pares:
- Acessar um item que talvez no exista:
-
- d.get(chave, default) #retorna None ou default
42. Conjuntos
- Conjuntos so colees de itens nicos e imutveis
- Existem duas classes de conjuntos:
-
-
- suportam s.add(item)es.remove(item)
-
- frozenset : conjuntos imutveis
-
-
- podem ser elementos de outros conjuntos e chaves de
dicionrios
43. Removendo repeties
- Transformar uma lista num set e depois transformar o set em
lista remove todos os itens duplicados da lista:
-
- l = [2, 6, 6, 4, 4, 6, 1, 4, 2, 2]
44. Arquivos
- Objetos da classefilerepresentam arquivos em disco
- Para abrir um arquivo, use o construtorfile() (a funoopen() um
sinnimo)
-
- abrir arquivo binrio para leitura:
-
-
- arq = file('/home/juca/grafico.png','rb')
-
- abrir arquivo texto para escrita:
-
-
- arq = file('/home/juca/nomes.txt','w')
-
- abrir arquivo para acrescentar (append):
-
-
- arq = file('/home/juca/grafico.png','a')
45. Execuo condicional
-
- ifcond : comando1 comando2
-
- ifcond1: comando1 elifcond2: comando2 else : comando3
46. Repeties: comandofor
- Para percorrer sequncias previamente conhecidas
-
- foriteminlista: printitem
- Se for necessrio um ndice numrico:
-
- fori,iteminenumerate(lista): printi,item
- Para percorrer uma PA de 0 a 99:
47. Repeties: comandowhile
- Para repetir enquanto uma condio verdadeira
48. Controle de repeties
- Para iniciar imediatamente a prxima volta do loop, use o
comandocontinue:
-
- """ Ignorar linhas em branco
-
- forlinhainfile('vendas.txt'):
-
- codigo, qtd, valor = linha.split()
49. Controle de repeties (2)
- Para encerrar imediatamente o loop, use o comandobreak :
50. Tratamento de excees
51. Palavras reservadas
52. Variveis
- Variveis contm referncias a objetos
-
- variveisnocontm os objetos em si
-
- os objetos aos quais elas se referem tm tipo
- Uma varivel no pode ser utilizada em uma expresso sem ter sido
inicializada
-
- no existe criao automtica de variveis
53. Atribuio
-
- atribuio posicional de itens de sequncias:
54. Atribuio
55. Atribuio: princpios
- Python trabalha com referncias, portanto a atribuio no gera uma
cpia do objeto
-
- Uma varivelno uma caixa que contm um valor (esquea esta velha
idia!)
-
- Uma varivel uma etiqueta Post-it colada a um objeto (adote esta
nova idia!!!)
- del : comando de desatribuio
-
- remove uma referncia ao objeto
-
- no existindo mais referncias, o objeto varrido da memria
56. Variveis
- Podem ser entendidas como rtulos
-
- no so "caixas que contm valores"
- Atribuir valor varivel equivale a colar um rtulo no valor
[1,2,3] a [1,2,3] a b 57. Apelidos e cpias
- aebso apelidos do mesmo objeto lista
- c uma referncia a uma cpia da lista
-
-
- ([21, 52, 73], [21, 52, 73], [21, 52, 73])
-
-
- ([21,99 , 73], [21,99 , 73], [21, 52, 73])
58. Definio de funes
- Comandodef inicia a definio
- Comandoreturnmarca o fim da execuo da funo e define o resultado
a ser retornado
-
- if len(texto) >> c = Coisa()
-
- ['__doc__', '__module__', 'altura', 'largura']
- passindica um bloco vazio
65. Como extender uma classe
-
- classContadorTolerante(Contador):
-
- returnself.dic.get(item, 0)
-
- classContadorTotalizador(Contador):
-
- super(ContadorTotalizador, self).__init__()
-
- super(ContadorTotalizador, self).incluir(item)
- Como invocar mtodos de super-classes:
66. Herana mltipla
-
- classContadorTolerante(Contador): defcontar(self, item):
-
- returnself.dic.get(item, 0)
-
- classContadorTotalizador(Contador):
-
- super(ContadorTotalizador, self).__init__()
-
- super(ContadorTotalizador, self).incluir(item)
-
- classContadorTT(ContadorTotalizador,ContadorTolerante):
- passindica um bloco vazio
67. Propriedades
- Encapsulamento quando voc precisa
>>> a = C() >>> a.x = 10#!!! >>>
print a.x 10 >>> a.x = -10 >>> print a.x# ??????
0 68. Implementao de uma propriedade classC(object):
def__init__(self, x=0): self.__x = x defgetx(self): returnself.__x
defsetx(self, x): if x < 0: x = 0 self.__x = x x =
property(getx, setx) classC(object): def__init__(self, x): self.__x
= x @property defx(self): returnself.__x
69. Exemplo de propriedade
-
- classContadorTotalizador( Contador ):
-
- super(ContadorTotalizador, self).__init__()
-
- super(ContadorTotalizador, self).incluir(item)
- Funciona porque uma classe estilo novo
-
- extende deContador , que extendeobject
70. python.mordida[0] Marco Andr Lopes Mendes [email_address]
marrcandre.blogspot.com slideshare.net/marcoandre