Вы находитесь на странице: 1из 12

Claudio Esperana

Python:
Python:
Mdulos
Mdulos
Mdulos
Mdulos

Mdulos so programas feitos para serem reaproveitados


em outros programas

Eles tipicamente contm funes, variveis, classes e


objetos que provm alguma funcionalidade comum

Por exemplo, j vimos que o mdulo math contm


funes matemticas como sin, exp, etc, alm da
constante pi

Toda a biblioteca padro do Python dividida em


mdulos e pacotes (veremos mais tarde)

Alguns dos mais comuns so: sys, os, time, random, re,
shelve
Escrevendo mdulos
Escrevendo mdulos

Na verdade, qualquer programa que voc escreva e salve num


arquivo pode ser importado como um mdulo

Por exemplo, se voc salva um programa com o nome


prog.py, ele pode ser importado usando o comando import
prog

Entretanto, a importao s ocorre uma vez

Python assume que variveis e funes no so mudados e


que o cdigo do mdulo serve meramente para inicializar
esses elementos
Escrevendo mdulos
Escrevendo mdulos

Aps a importao de um mdulo, este compilado,


gerando um arquivo .pyc correspondente

No exemplo, um arquivo prog.pyc ser criado

Python s recompila um programa se o arquivo .py for


mais recente que o arquivo .pyc
Exemplo (em Unix)
Exemplo (em Unix)
$ cat teste.py
def f():
print "alo"
f()
$ python
...
>>> import teste
alo
>>> import teste
>>> teste.f()
alo
>>>
$ dir teste*
teste.py teste.pyc
Tornando mdulos disponveis
Tornando mdulos disponveis

Em que diretrio os mdulos so buscados durante a


importao?

No diretrio corrente

Nos diretrios da lista sys.path

Se for desejvel especificar o local onde os mdulos


residem, h essencialmente duas opes

Alterar diretamente a varivel sys.path

Alterar a varivel de ambiente PYT!"P#T

o mtodo recomendvel pois no requer que o programa


que importar o mdulo seja alterado
Exemplo
Exemplo
$ m$dir python
$ mv teste.py python%
$ cat python%teste.py
def f():
print "alo"
f()
$ export PYT!"P#T&'%python
$ python
Python (.).( (*(+ ,ep -. (../+ (0:01:.0)
...
>>> import teste
alo
A varivel
A varivel
__name__
__name__

Se um programa pode ser executado por si s ou


importado dentro de outro, como distinguir as duas
situaes?

A varivel __name__ definida para cada programa:

Se um mdulo, retorna o nome do mdulo

Se um programa sendo executado, retorna '__main__'

Para saber se o cdigo est sendo executado como


mdulo, basta testar:

If __name__ == '__main__': cdigo

Isto til em diversas circunstncias

Por exemplo, para colocar cdigo de teste, cdigo para


instalao do mdulo ou exemplos de utilizao
Exemplo
Exemplo
$ cat teste.py
def f():
print "alo"
if 22name22 && 322main223:
f()
$ python teste.py
alo
$ python
Python (.).( (*(+ ,ep -. (../+ (0:01:.0)
...
>>> import teste
>>> print 22name22
22main22
>>> print teste.22name22
teste
Pacotes
Pacotes

So hierarquias de mdulos

Um pacote um diretrio que contm um arquivo chamado


22init22.py

O pacote deve estar em um dos diretrios nos quais o Python


busca por mdulos

Para importar o pacote, use o nome do diretrio

O programa correspondente ao pacote 22init22.py


Pacotes
Pacotes

Os demais arquivos e diretrios dentro do pacote so


encarados recursivamente como mdulos

Por exemplo, se um pacote se chama p e contm um arquivo


chamado m.py, ento podemos importar

p (arquivo p%22init22.py)

p.m (arquivo p%m.py)

Semelhantemente, p poderia ter um outro pacote sob a


forma de outro diretrio contendo um arquivo
22init22.py
Exemplo
Exemplo
$ dir python%
pacote teste.py
$ dir python%pacote%
22init22.py teste(.py
$ cat python%teste.py
print "teste"
$ cat python%pacote%22init22.py
print "pacote"
$ cat python%pacote%teste(.py
print "teste("
$ python
...
>>> import teste
teste
>>> import pacote
pacote
>>> import pacote.teste(
teste(