Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Claudio Esperana
Mdulos
Mdulossoprogramasfeitosparaseremreaproveitados
emoutrosprogramas
Elestipicamentecontmfunes,variveis,classese
objetosqueprovmalgumafuncionalidadecomum
Porexemplo,jvimosqueomdulomathcontm
funesmatemticascomosin,exp,etc,almda constantepi
TodaabibliotecapadrodoPythondivididaem
mdulosepacotes(veremosmaistarde)
Algunsdosmaiscomunsso:sys,os,time,random,re,
shelve
Escrevendo mdulos
Naverdade,qualquerprogramaquevocescrevaesalvenum
arquivopodeserimportadocomoummdulo
Porexemplo,sevocsalvaumprogramacomonome
prog.py,elepodeserimportadousandoocomandoimport prog
Apsaimportaodeummdulo,estecompilado,
gerandoumarquivo.pyccorrespondente
importao?
Nodiretriocorrente Nosdiretriosdalistasys.path
Sefordesejvelespecificarolocalondeosmdulos
residem,hessencialmenteduasopes
Alterardiretamenteavarivelsys.path AlteraravariveldeambientePYTHONPATH
omtodorecomendvelpoisnorequerqueoprograma queimportaromdulosejaalterado
Exemplo
$ mkdir python $ mv teste.py python/ $ cat python/teste.py def f(): print "alo" f() $ export PYTHONPATH=~/python $ python Python 2.4.2 (#2, Sep 30 2005, 21:19:01) ... >>> import teste alo
A varivel __name__
Seumprogramapodeserexecutadoporsisou
importadodentrodeoutro,comodistinguirasduas situaes?
Avarivel__name__definidaparacadaprograma:
Seummdulo,retornaonomedomdulo Seumprogramasendoexecutado,retorna'__main__'
Parasaberseocdigoestsendoexecutadocomo
mdulo,bastatestar:
Istotilemdiversascircunstncias
Exemplo
$ cat teste.py def f(): print "alo" if __name__ == '__main__': f() $ python teste.py alo $ python Python 2.4.2 (#2, Sep 30 2005, 21:19:01) ... >>> import teste >>> print __name__ __main__ >>> print teste.__name__ teste
Pacotes
Sohierarquiasdemdulos Umpacoteumdiretrioquecontmumarquivochamado
__init__.py
Oprogramacorrespondenteaopacote__init__.py
Pacotes
Osdemaisarquivosediretriosdentrodopacotesoencarados
recursivamentecomomdulos
Porexemplo,seumpacotesechamapecontmumarquivo chamadom.py,entopodemosimportar
Semelhantemente,ppoderiaterumoutropacotesobaforma deoutrodiretriocontendoumarquivo__init__.py
Exemplo
$ dir python/ pacote teste.py $ dir python/pacote/ __init__.py teste2.py $ cat python/teste.py print "teste" $ cat python/pacote/__init__.py print "pacote" $ cat python/pacote/teste2.py print "teste2" $ python ... >>> import teste teste >>> import pacote pacote >>> import pacote.teste2 teste2
A varivel __all__
Emprincpio,todososnomesdefinidosnummduloso
disponibilizadosquandoomduloimportado
Asexceessonomesquecomeamcomum_
Pararestringirosnomesquesequerexportar,usasea
varivel__all__
umalistadestringsdenomesdeobjetos(variveis, classes,funes)queseroexportados
$ cat test.py def f (): print "f" def g(): print "g" h = 5 __all__ = ["h","g"] $ python ... >>> from test import * >>> h 5 >>> g <function g at 0xb7c9a17c> >>> f Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'f' is not defined
Exemplo