python_para_desenvolvedores
253 pág.

python_para_desenvolvedores


DisciplinaComputação II152 materiais465 seguidores
Pré-visualização34 páginas
'The Nursery Crime'],
 'ELP': ['Brain Salad Surgery']}
# Mais progs
progs['King Crimson'] = ['Red', 'Discipline']
# Iteração
for prog, albuns in progs.items():
 print prog, '=>', albuns
# Se tiver 'ELP', deleta
if progs.has_key('ELP'):
 del progs['ELP']
Exemplo de matriz esparsa:
# -*- coding: latin1 -*-
# Matriz esparsa implementada
items() retorna uma lista de
tuplas com a chave e o valor.
36 Tipos
# com dicionário
# Matriz esparsa é uma estrutura
# que só armazena os valores que
# existem na matriz
dim = 6, 12
mat = {}
# Tuplas são imutáveis
# Cada tupla representa
# uma posição na matriz
mat[3, 7] = 3
mat[4, 6] = 5
mat[6, 3] = 7
mat[5, 4] = 6
mat[2, 9] = 4
mat[1, 0] = 9
for lin in range(dim[0]):
 for col in range(dim[1]):
 # Método get(chave, valor)
 # retorna o valor da chave
 # no dicionário ou se a chave
 # não existir, retorna o
 # segundo argumento
 print mat.get((lin, col), 0),
 print
Saída:
0 0 0 0 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 4 0 0
0 0 0 0 0 0 0 3 0 0 0 0
0 0 0 0 0 0 5 0 0 0 0 0
0 0 0 0 6 0 0 0 0 0 0 0
Gerando a matriz esparsa:
# -*- coding: latin1 -*-
# Matriz em forma de string
matriz = '''0 0 0 0 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 4 0 0
0 0 0 0 0 0 0 3 0 0 0 0
Tipos 37
0 0 0 0 0 0 5 0 0 0 0 0
0 0 0 0 6 0 0 0 0 0 0 0'''
mat = {}
# Quebra a matriz em linhas
for lin, linha in enumerate(matriz.splitlines()):
 # Quebra a linha em colunas
 for col, coluna in enumerate(linha.split()):
 coluna = int(coluna)
 # Coloca a coluna no resultado,
 # se for diferente de zero
 if coluna:
 mat[lin, col] = coluna
print mat
# Some um nas dimensões pois a contagem começa em zero
print 'Tamanho da matriz completa:', (lin + 1) * (col + 1)
print 'Tamanho da matriz esparsa:', len(mat)
Saída:
{(5, 4): 6, (3, 7): 3, (1, 0): 9, (4, 6): 5, (2, 9): 4}
Tamanho da matriz completa: 72
Tamanho da matriz esparsa: 5
A matriz esparsa é uma boa solução de processamento para estruturas em que a maioria 
dos itens permanecem vazios, como planilhas, por exemplo.
38 Tipos
Verdadeiro, falso e nulo
Em Python, o tipo booleano (bool) é uma especialização do tipo inteiro (int). O verdadeiro é 
chamado True e é igual a 1, enquanto o falso é chamado False e é igual a zero.
Os seguintes valores são considerados falsos:
\u25aa False (falso).
\u25aa None (nulo).
\u25aa 0 (zero).
\u25aa '' (string vazia).
\u25aa [] (lista vazia).
\u25aa () (tupla vazia).
\u25aa {} (dicionário vazio).
\u25aa Outras estruturas com o tamanho igual a zero.
São considerados verdadeiros todos os outros objetos fora dessa lista.
O objeto None, que é do tipo NoneType, do Python representa o nulo e é avaliado como 
falso pelo interpretador.
Funções 39
Funções
Funções são blocos de código identificados por um nome, que podem receber parâmetros 
pré-determinados.
No Python, as funções:
\u25aa Podem retornar ou não objetos.
\u25aa Aceitam Doc Strings.
\u25aa Aceitam parâmetros opcionais (com defaults). Se não for passado o parâmetro será 
igual ao default definido na função.
\u25aa Aceitam que os parâmetros sejam passados com nome. Neste caso,a ordem em que 
os parâmetros foram passados não importa.
\u25aa Tem namespace próprio (escopo local), e por isso podem ofuscar definições de 
escopo global.
\u25aa Podem ter suas propriedades alteradas (geralmente por decoradores).
Doc Strings são strings que estão associadas a uma estrutura do Python. Nas funções, as 
Doc Strings são colocadas dentro do corpo da função, geralmente no começo. O objetivo 
das Doc Strings é servir de documentação para aquela estrutura.
Sintaxe:
def func(parametro1, parametro2=padrao):
 """Doc String
 """
 <bloco de código>
 return valor
Os parâmetros com default devem ficar após os que não tem default.
Exemplo (fatorial):
def fatorial(num):
 if num <= 1:
 return 1
 else:
 return(num * fatorial(num - 1))
Exemplo (série de Fibonacci):
A função é recursiva.
O retorno é opcional.
40 Funções
def fib(n):
 &quot;&quot;&quot;Fibonacci:
 fib(n) => fib(n - 1) + fib(n - 2) se n > 1
 fib(n) => 1 se n <= 1
 &quot;&quot;&quot;
 if n > 1:
 return fib(n - 1) + fib(n - 2)
 else:
 return 1
# Mostrar Fibonacci de 1 a 5
for i in [1, 2, 3, 4, 5]:
 print i, '=>', fib(i)
Exemplo (conversão de RGB):
# -*- coding: latin1 -*-
def rgb_html(r=0, g=0, b=0):
 &quot;&quot;&quot;Converte R, G, B em #RRGGBB&quot;&quot;&quot;
 return '#%02x%02x%02x' % (r, g, b)
def html_rgb(color='#000000'):
 &quot;&quot;&quot;Converte #RRGGBB em R, G, B&quot;&quot;&quot;
 if color.startswith('#'): color = color[1:]
 r = int(color[:2], 16)
 g = int(color[2:4], 16)
 b = int(color[4:], 16)
 return r, g, b # Uma seqüência
print rgb_html(200, 200, 255)
print rgb_html(b=200, g=200, r=255) # O que houve?
print html_rgb('#c8c8ff')
Observações:
\u25aa Os argumentos com padrão devem vir por último, depois dos argumentos sem 
padrão.
\u25aa O valor do padrão para um parâmetro é calculado quando a função é definida.
\u25aa Os argumentos passados sem identificador são recebidos pela função na forma de 
uma lista.
\u25aa Os argumentos passados com identificador são recebidos pela função na forma de 
um dicionário.
\u25aa Os parâmetros passados com identificador na chamada da função devem vir no fim 
Funções 41
da lista de parâmetros.
Exemplo de como receber todos parâmetros:
# -*- coding: latin1 -*-
# *args - argumentos sem nome (lista)
# **kargs - argumentos com nome (dicionário)
def func(*args, **kargs):
 print args
 print kargs
No exemplo, kargs receberá os argumentos nomeados e args receberá os outros.
42 Documentação
Documentação
PyDOC é a ferramenta padrão de documentação9 do Python. Ela pode ser utilizada tanto 
para acessar a documentação dos módulos que acompanham o Python, quanto módulos 
de terceiros.
No Windows, acesse o ícone \u201cModule Docs\u201d para a documentação da biblioteca padrão e 
\u201cPython Manuals\u201d para consultar o tutorial, referências e outros documentos mais 
extensos.
Para utilizar o PyDOC no Linux:
pydoc ./modulo.py
Para exibir a documentação de \u201cmodulo.py\u201d no diretório atual.
No Linux, para ver a documentação das bibliotecas no browser, utilize o comando:
pydoc -p 8000
E acesse o endereço http://localhost:8000/.
Para rodar a versão gráfica do PyDOC execute:
pydoc -g
O PyDOC utiliza as Doc Strings dos módulos para gerar a documentação.
Além disso, é possível ainda consultar a documentação no próprio interpretador, através 
da função help().
Exemplo:
help(list)
Mostra a documentação para a lista do Python.
9 A documentação do Python também disponível na internet em: http://www.python.org/doc/.
Exercícios I 43
Exercícios I
1. Implementar duas funções:
\u25aa Uma que converta temperatura em graus Celsius para Fahrenheit.
\u25aa Outra que converta temperatura em graus Fahrenheit para Celsius.
Lembrando que:
2. Implementar uma função que retorne verdadeiro se o número for primo (falso caso 
contrário). Testar de 1 a 100.
3. Implementar uma função que receba uma lista de listas de comprimentos quaisquer e 
retorne uma lista de uma dimensão.
4. Implementar uma função que receba um dicionário e retorne a soma, a média e a 
variação dos valores.
5. Escreva uma função que:
\u25aa Receba uma frase como parâmetro.
\u25aa Retorne uma nova frase com cada palavra com as letras invertidas.
6. Crie uma função que:
\u25aa Receba uma lista de tuplas (dados), um inteiro (chave, zero por padrão igual) e um 
booleano (reverso, falso por padrão).
\u25aa Retorne dados ordenados pelo item indicado pela chave e em ordem decrescente se 
reverso for verdadeiro.
F= 9
5
\u22c5C\ue08332
44 Parte II
Parte II
\u25aa Módulos.
\u25aa Escopo de