0% acharam este documento útil (0 voto)
3 visualizações22 páginas

Python l02

O documento aborda conceitos avançados de Python, incluindo módulos, pacotes, manipulação de arquivos, introspecção, exceções e decoradores. Ele detalha como os módulos funcionam, apresenta exemplos práticos de uso e discute a biblioteca padrão. Além disso, inclui exercícios para aplicar os conhecimentos adquiridos.

Enviado por

alipio_resende
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
3 visualizações22 páginas

Python l02

O documento aborda conceitos avançados de Python, incluindo módulos, pacotes, manipulação de arquivos, introspecção, exceções e decoradores. Ele detalha como os módulos funcionam, apresenta exemplos práticos de uso e discute a biblioteca padrão. Além disso, inclui exercícios para aplicar os conhecimentos adquiridos.

Enviado por

alipio_resende
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Python

Luiz Eduardo Borges


TI-CENPES
Python (parte III)

• Módulos
• Namespaces
• Módulos da biblioteca padrão
• Pacotes
• Arquivos e I/O
• Introspecção
• Exceções
• Decoradores
Módulos

• Módulos podem conter qualquer estrutura do


Python e são executados quando importados
• Geralmente são compilados uma vez e
armazenados em arquivo (pyc ou pyo)
• Possuem namespace próprio e aceitam Doc
Strings
• São localizados através da lista de pastas
PYTHONPATH ([Link])
• O módulo principal de um programa tem a
variável __name__ igual à “__main__”.
Módulos

__main__ Módulo principal em execução.

sys Módulo sys (import sys)


path path é uma lista.
exit exit é uma função.

Função Função definida em __main__.


[Link]

[Link]() Chamando exit de sys.


Namespaces

Módulo Um namespace é um escopo de


definição de estruturas.
Var 1

Var 2 Estas são variáveis globais.

Var 3
Var 3 foi ofuscada, pois foi
(re)definida no escopo local.
Função

Var 3
Estas são variáveis locais.
Var 4
Módulos da biblioteca padrão

Módulos importantes da biblioteca padrão:


• Sistema: os, [Link], glob, shutils, subprocess
• Threads: threading
• Persistência: pickle, cPickle, shelve
• XML: [Link], [Link], elementTree (2.5)
• Configuração: ConfigParser, optparse
• Tempo: time, datetime
• Outros: sys, logging, traceback, profile, types,
timeit, decimal
Módulos (exemplo)

"""
modutils => utilitários para módulos
"""
import [Link]
import sys
import glob

def find(txt):
"""encontra módulos que tem o nome contendo texto"""
resp = []
for path in [Link]:
mods = [Link]('%s/*.py' % path)
for mod in mods:
if txt in [Link](mod):
[Link](mod)
return resp
Módulos (exemplo)

from [Link] import getsize, getmtime


from time import localtime, asctime

import modutils Isto é um import relativo.

mods = [Link]('xml')

for mod in mods:


tm = asctime(localtime(getmtime(mod)))
kb = getsize(mod) / 1024
print '%s: (%d kbytes, %s)' % (mod, kb, tm)

c:\python24\lib\[Link]: (34 kbytes, Fri Oct 28 20:16:20 2005)


c:\python24\lib\[Link]: (44 kbytes, Fri Oct 28 20:16:18 2005)
Pacotes

componentes Esta pasta é um pacote.

__init__.py Identifica a pasta como pacote.


[Link] [Link]
termostato [Link]

[Link] [Link]
crt [Link]
lcd [Link]
oled [Link]
Arquivos e I/O (escrita)

import sys

# Criando um objeto do tipo file


temp = file('[Link]', 'w')
# Escrevendo no arquivo
for i in range(100): Modo de escrita é “w” (write)
[Link]('%03d\n' % i)
# Fechando
[Link]()

temp = file('[Link]') O padrão é texto / leitura.


for x in temp:
[Link](x)
[Link]()
[Link] é a saída padrão.
Arquivos e I/O (leitura)

import sys Limpa espaços extras.


import [Link]

# raw_input retorna a string digitada


fn = raw_input('Nome do arquivo: ').strip()

if not [Link](fn): O arquivo existe?


print 'Tente outra vez...'
[Link]()

# Numerando as linhas
for i, s in enumerate(file(fn)):
print i + 1, s,
O iterator retorna as linha do
arquivo.
Introspecção

Introspecção ou reflexão:
type(objeto)
capacidade do software de
# Retorna o tipo (classe) do objeto.
identificar suas próprias
estruturas internas, tais como
id(objeto)
tipos, escopo de variáveis,
# Retorna o identificador do objeto.
métodos e atributos.
locals()
# Retorna o dicionário de variáveis locais.

globals()
# Retorna o dicionário de variáveis globais.

len(objeto)
# Retorna o tamanho do objeto.
Introspecção

dir(objeto)
# Retorna a lista de estruturas do objeto.

help(objeto)
# Retorna as Doc Strings do objeto.

isinstance(objeto, classe)
# Retorna verdadeiro se objeto deriva da classe.

issubclass(subclasse, classe)
# Retorna verdadeiro se subclasse herda classe.
Introspecção (inspect)

# inspect: módulo de instrospecção "amigável"


import inspect
import [Link]

print [Link]([Link])
# <module 'ntpath' from 'C:\Python24\lib\[Link]'>

print [Link](str)
# True

# Lista todas as funções que existem em "[Link]"


for name, struct in [Link]([Link]):
if [Link](struct):
print name
Exceções

print 1/0 Quando um erro em tempo de


execução acontece, é gerada uma
Traceback (most recent call last): exceção.
File "<input>", line 1, in ?
ZeroDivisionError: integer division or modulo by zero

Quando o código dentro de um


try gera uma exceção, a
try:
execução é desviada para o
print 1/0
código dentro do except.
except ZeroDivisionError:
print 'Erro ao tentar dividir por zero.'

Erro ao tentar dividir por zero.


Exceções

import traceback

try:
fn = raw_input('Nome do arquivo: ').strip()

# Numerando as linhas
for i, s in enumerate(file(fn)):
print i + 1, s,
Intercepta qualquer exceção.
except:
trace = traceback.format_exc()
print 'Aconteceu um erro:\n', trace
file('[Link]', 'a').write(trace)
raise SystemExit Gera uma nova exceção.
Decoradores

Decorador
Função Função
Original Modificada

def func(arg): def decorator(f):


return arg [Link] = True
return f
def decorator(f):
[Link] = True @decorator
return f def func(arg):
return arg
func = decorator(func)
Decoradores (exemplo)

def dumpargs(f): O decorador imprime os


def func(*args): argumentos da função.
print args
return f(*args)
return func Retorna a função transformada.

@dumpargs Aplica o decorador.


def multiply(*nums):
m=1
for n in nums:
m=m*n
return m
(1, 2, 3)
print multiply(1, 2, 3)
6
Exercícios

1. Implementar um programa que receba um nome


de arquivo e gere estatísticas sobre o arquivo
(número de caracteres, número de linhas e
número de palavras)

2. Implementar um módulo com duas funções:


a. matrix_sum(*matrices), que retorna a matriz
soma de matrizes de duas dimensões
b. camel_case(s), que converte nomes para
CamelCase.
Exercícios

3. Implementar uma função que leia um arquivo e


retorne uma lista de tuplas com os dados (o
separador de campo do arquivo é vírgula),
eliminando as linhas vazias. Caso ocorra algum
problema, imprima uma mensagem de aviso e
encerre o programa.
Exercícios

4. Implementar um módulo com duas funções:


a. split(fn, n), que quebra o arquivo fn em partes de
n bytes e salva com nomes sequênciais (se fn =
[Link], então arq_001.txt, arq_002.txt, ... )
b. join(fn, fnlist) que junte os arquivos da lista fnlist
em um arquivo só fn.
Fim

Você também pode gostar