2.PuestaenMarchaAutores:JosMaraHerreraFernndez,LuisMiguelSnchezBreaContenidosdeestecaptulo:WindowsLinuxTrabajarconPythonConsolasIDEsPythonpathAyudasMiprimerprogramaEstructuradeunprograma.pyAutoejecucinCabeceraGeneracindeayudasCargadeMdulosDefinicindefuncionesCdigoejecutable:mainSistemadeverificacindelcdigoComo
en casi todos los programas, dependiendo del sistema operativo del
que disponga nuestro ordenador
lainstalacindesoftwarevariarligeramenteyPythonnoesunaexcepcin.AfindequeelsistemaoperativonosupongaunbacheennuestrocaminohaciaelaprendizajedePython,enestaseccinveremoslainstalacinpasoapasoenlosdossistemasoperativosmsextendidosenlaactualidad.Paraotrossistemasoperativosrecomendamosallectorqueencasodedudaacudaalagranbibliografaexistenteenlared.2.1.WindowsA
la hora de instalar Python en el sistema operativo de Microsoft
tenemos dos opciones segn el uso que vayamos ahacer del lenguaje de
programacin. Por una parte, como ya hemos mencionado en la
introduccin, Python es
unleguanjedeprogramacindeusogeneralporloque,sisteeselcaso,recomendamoslainstalacindelpaquetebsicoeincorporarlosmdulosquenecesitemos.EnelsitiooficialdePhythonenlaseccindedescargaspodemosencontrardiferentes
versiones. En la actualidad conviven las versiones 3.3.* y 2.7.*
donde * es la ltima versin estable. Lasinstalaciones de este libro
fueron realizadas con la versin 2.7.2 aunque no vara
sustancialmente para
versionesposteriores.Porotraparte,comolaprogramacinquevamosarealizarestorientadaalmbitocientficoacadmicoeingenieril,
la opcin que ms se ajusta a nuestros intereses es el paquete
Python(x,y).Python(x,y) es un software dedesarrollo gratuito que
incorpora los principales mdulos necesarios para clculo numrico
junto con algn otrocomplemento que analizaremos posteriormente. La
instalacin es similar a otros programas de Windows. Lo
primeroquedebemosdehaceresdescargarmoslaltimaversindelprogramadesdelaseccindedescargasdelaweboficial,http://code.google.com/p/pythonxy/wiki/Downloads?tm=2.EnlaFigura2podemosverqueenelmismoenlacedisponemosdelasnotasdeinstalacinquerecomendamosrepasarantes
de iniciar el proceso. Son unos 420 MB (ya que tiene bastantes
aplicaciones). Una vez instalado observaremoscomo nuestros archivos
con extensin .py se asocian con python por lo que si pinchamos dos
veces sobre ellos seejecutarn.TABLA DE CONTENI
DOSAutoresQuesnuevoLicenciaDescargasReferencias1.Introduccin2.PuestaenMarcha3.LenguajesdeProgramacin4.MdulosCientficos5.EcuacionesdeMaxwellenelvaco6.Polarizacin7.Interaccinradiacinmateria8.ndicederefraccin:modelomicroscpico9.EcuacionesdeFresnel10.Pulsosdeluz11.Interferencias12.Mdulosdeptica13.Difraccinencampocercano14.Difraccinencampolejano15.RedesdeDifraccin16.ProcesadopticodelainformacinBSQUEDA
IraIntroduzcalostrminosdebsquedaounnombredemdulo,claseofuncin.Computacin
cientfica con Python para mdulos de evaluacin continuaen
asignaturas de ciencias aplicadasANTERI OR|SI GUI
ENTEFigura2.DescargadePython(x,y)desdelaseccincorrespondienteenlaweboficial.Enlasmismapginapodemosencontrarlasnotasdeinstalacinquedebemosdetenerencuenta.2.2.LinuxPythonvieneincorporadoenlamayoradelasdistribucionesexistentes.SienunaterminalejecutamoselcomandopythonVcomprobaremosqueversindePythontenemosinstalada.EncasodenoseraspodemosinstalarloejecutandoaptgetinstallpythonOtra
opcin es, por ejemplo, desde el centro de software en Ubuntu. Basta
con buscar python en el lugarcorrespondiente y nos indicar si lo
tenemos instalado y si queremos instalarlo o desistalarlo. Para
instalar
nuevosmdulossepuedeseguirelmismoprocedimientoyaseadesdelaterminalodesdeelcentrodesoftware.2.2.1.TrabajarconPythonAlahoradeiniciarseenlaprogramacinesmuyimportanteconocerlasintasisdellenguajequesevaautilizarparadesarrollar
codigo de una manera correcta. De igual importancia es conocer las
herramientas de las que
disponemosparaejecutarydepurarelcdigodesarrollado.2.3.ConsolasDesde
el mismo momento en el que Python se instala en el sistema podemos
empezar a programar abriendo
unaconsolainteractivaenunaterminal.Laconsolainteractivamssencillaseejecutadirectamenteenunterminal(Linux)escribiendopythonInmediantamente
podremos ir introduciendo lineas de comandos y ejecutar de una en
una. En Windows la forma
esequivalente.Existenconcolasinteractivasmscompletasquenosvanindicandoayudasinmediatasamedidaquevamosescribiendocdigo.Seintroducelainstruccionyseejecutadeunaenuna.Estaformadeprogramacinesadecuadacuandosomosprincipiantes
y estamos desarrollando programas cortos donde nos interesa ver
inmediatamente si el resultado
escorrectoono.2.4.IDEsLasconsolasnoeselmejorprocedimientoparadesarrollarprogramasextensos.Elcdigoescritoenlaconsolanoesfcildeseguirydevolverautilizar.UnaprogramacineficazserealizamedianteunEntornodeDesarrolloIntegrado(IDE,
Integrated Developed Environment). Con este acrnimo ingls se
describe a toda aplicacin de sofware
queproporcionaunafacilidadcomprensivaalahoradelacreacindeprogramasinformticosseaenellenguajequesea.NormalmenteunIDEconstadeuneditordecdigofuente,uncompliadory/ounintrprete,herramientasdecreacinyundepurador.Tambinsuelentenerconsolasinteractivas.EnestaseccinnoscentraremosentresIDEsenparticular:IDLE,SpyderyEclipse.IDLE:eselIDEdePythonbasadoenelentornodeventantasthinterydesarrollado100%tambinenPython.Es
el ms simple de los tres que veremos pero para principiantes quizs
sea el ms adecuado. Posee
mododepuracinaunqueparaprogramadoresexperimentadossequedabastantecorto.LainstalacinenWindowsserealizaconlainstalacindelpropiolenguajemientrasqueenelrestodeSOlainstalacinserealizadelaformausual.
Para ms informacin podemos consultar la documentacin oficial en el
siguiente enlace:http://docs.python.org/2/library/idle.html. En la
Figura 3 se muestra un ejemplo de creacin de un array en
laconsoladeIDLE.Figura3.ConsoladeIDLE.Spyder:SpyderesunIDEespecficoparaPythonorientadoacientficosydesarrolloingenierilconunainterfazmuy
similar a Matlab, por lo que es la opcin ms adecuada cuando se
quiere migrar de Matlab a Python.
SihemosinstaladoPython(x,y),aliniciarelprogramasenosabreunaventanacondiversascaractersitcas.Dentrode
la pestaa Shortcuts nos encontramos el apartado Spyder. Bastar con
pinchar en el smbolo
delprograma(Figura4)einmediatamentesenosabriraelprograma.Comosiempre,sinosencontramosenlinuxabrimosunaterminalyejecutamoslaordensudoaptgetinstallspyderytrasunossegundosnosaparecercomoopcinennuestromenu.Figura4.SpyderenPython(X,Y).Parainiciarelprogramapinchamosenelsmboloresaltadoenlaimagen.Al
iniciar el programa por primera vez vemos que, si hemos sido
usuarios de MATLAB, efectivamente
nosencontramosenunentornofamiliar.EnlaFigura5vemosqueenlazonaizquierdadelapantallatenemosuneditordecdigo.
En la zona central nos encontramos un navegador con nuestros
programas y en la zona derecha tenemos
laayudaylaconsolainteractiva.Figura5.Spyderconsusdiferentessecciones.ParamsinformacinpodemosconsultarelmanualoficialdelIDEenhttp://packages.python.org/spyder/Eclipse:Eclipsees
un programa informtico compuesto por un conjunto de herramientas de
programacin
decdigoabiertomultiplataformaparadesarrollarloqueelproyectollamaAplicacionesdeClienteEnriquecido,opuestoalasaplicacionesClientelivianobasadasennavegadores.Estaplataforma,tpicamentehasidousadaparadesarrollarIDEs,comoelIDEdeJavallamadoJavaDevelopmentToolkit(JDT).EclipsepuedeserusadoconPythonmediantelainstalacindePydev.PydevesunIDEparaEclipsemuycompletoyconfigurableconunmododedepuracinextraordinariamentepotente.DelostresIDEsquehemosvisto,steeselentornomscomplicado
por la cantidad de opciones que contiene. Sin embargo para el
programador avanzado ser el
quemscomodoleresultealahoraderealizarsusprogramas.Si nos
encontramos en el sistema operativo de Microsoft, lo primero que
debemos hacer es decargarnos la
ultimaversindelprogramaenelsitiooficial,http://www.eclipse.org/downloads/.Enlinux,sudoaptgetinstalleclipseTantoenlinuxcomoenWindowssinolostenemosdebemosinstalarlaultimaversindeJavaDevelopmentKit(JDK)yelJavaRuntimeEnvironment(JRE).ParaconfigurarPyDevenEclipsedebemosdeseguirlossiguientespasos:1.
Abrimos Eclipse y nos vamos a Help > Install New Software. En la
pantalla emergente
aadimoshttp://pydev.org/updatesenelcampoworkwith.Figura6.InstalaciondePydevenEclipse.2.
PulsamosenAdd,esperamosaqueactualizeelcampodeabajoparapoderseleccionarPyDev,luegopulsamosenNext,yseguimoselasistenteparacompletarlainstalacin.Figura7.InstalaciondePydevenEclipse.3.
ReiniciamosEclipse.4. Ahora deberemos especificar dnde se encuentra
el interprete de python en las preferencias Eclipse, para ellonos
vamos a Eclipse >preferences>PyDev>Interpreter>Python.
Pulsamos en autoConfig,
marcamostodo(sinoloest)yaceptamos.Figura8.InstalacindePydevenEclipse.En
este caso tambin tenemos a nuestra disposicin un manual oficial muy
completo enhttp://pydev.org/manual_101_root.html. Si hemos
realizado todos los pasos correctamente podremos ejecutarprogramas
realizados en python sin ningn problema. En la Figura [figEclipse]
podemos ver un ejemplo de ladisposicin de las secciones en Eclipse.
Estas seccciones son totalmente configurables por lo que
dependiendo
devuestraspreferenciaslaimagenpuedeonocoincidirconvuestradisposicin.Figura9.EclipseconPydevconfigurado.2.5.PythonpathDependiendo
el IDE elegido se nos habr creado una carpeta como directorio de
trabajo. Sin embargo en
ocasionespuedeinteresarnostrabajarconarchivosfueradeestedirectorio.Paraellodebemosdeaadirlanuevarutadenuestrosarchivos.EstaoperacinserealizaenPythonpath.Spyder:Tools>PYTHONPATHmanager.Sebuscaeldirectoriodondetenemoslosprogramas.Eclipse:Project>Properties>PydevPYTHONPATH.Sebuscaeldirectoriodondetenemoslosprogramas.Figura10.CargadelosdirectoriosenelPythonpath,paraeclipse.2.6.AyudasLascomandosdeloslenguajesdeprogramacinsonprcticamenteinfinitosy,slomedianteprctica,conseguiremosaprendernosalgunosdeellos.Sinembargo,enlamayoradeloscasosdebereosacudiraladocumentacinoficialpararesolvernuestrasdudas.Normalmentecadalenguajedeprogramacintienealgncomandoespecficoparaaccederalainformacinquenosinterese.AdemsmuchosdelosIDEfacilitanelaccesoaestainformacinmediantealgnaccesodirecto
o alguna ventana permanente. En general los pasos a seguir cuando
no sabemos qu comando utilizar o
lasintaxisdesuutilizacinsonlossiguientes.Google.Elbuscadordeinformacineninternetporexcelencia.Enalgunasocasionesnosabremosmuybienpordondeempezaronossabremoselcomandoequivalenteenotrolenguajedeprogramacin.Siellectorhatenidoesa
duda seguramente otra persona la haya tenido antes por lo que
podremos encontrar la respuesta
sindemasiadoesfuerzo.Medianteelusodecomandosespecificos.Comohemosmencionado,cadalenguajedeprogramacintieneunaserie
de comandos para accecer a la informacin de los comandos acerca de
los cuales tengamos dudas.
Porejemplosienunaconsolatecleamosimportnumpyasnphelp(np.linspace)obtendremoslainformacindelinspaceenlamismaconsola,Helponfunctionlinspaceinmodulenumpy.core.function_base:linspace(start,stop,num=50,endpoint=True,retstep=False)Returnevenlyspacednumbersoveraspecifiedinterval.Returns`num`evenlyspacedsamples,calculatedovertheinterval[`start`,`stop`].Theendpointoftheintervalcanoptionallybeexcluded.Parametersstart:scalarThestartingvalueofthesequence.stop:scalarTheendvalueofthesequence,unless`endpoint`issettoFalse.Inthatcase,thesequenceconsistsofallbutthelastof``num+1``evenlyspacedsamples,sothat`stop`isexcluded.Notethatthestepsizechangeswhen`endpoint`isFalse.num:int,optionalNumberofsamplestogenerate.Defaultis50.endpoint:bool,optionalIfTrue,`stop`isthelastsample.Otherwise,itisnotincluded.DefaultisTrue.retstep:bool,optionalIfTrue,return(`samples`,`step`),where`step`isthespacingbetweensamples.Returnssamples:ndarrayThereare`num`equallyspacedsamplesintheclosedinterval``[start,stop]``orthehalfopeninterval``[start,stop)``(dependingonwhether`endpoint`isTrueorFalse).step:float(onlyif`retstep`isTrue)Sizeofspacingbetweensamples.SeeAlsoarange:Similiarto`linspace`,butusesastepsize(insteadofthenumberofsamples).logspace:Samplesuniformlydistributedinlogspace.Examples>>>np.linspace(2.0,3.0,num=5)array([2.,2.25,2.5,2.75,3.])>>>np.linspace(2.0,3.0,num=5,endpoint=False)array([2.,2.2,2.4,2.6,2.8])>>>np.linspace(2.0,3.0,num=5,retstep=True)(array([2.,2.25,2.5,2.75,3.]),0.25)Graphicalillustration:>>>importmatplotlib.pyplotasplt>>>N=8>>>y=np.zeros(N)>>>x1=np.linspace(0,10,N,endpoint=True)>>>x2=np.linspace(0,10,N,endpoint=False)>>>plt.plot(x1,y,'o')[]>>>plt.plot(x2,y+0.5,'o')[]>>>plt.ylim([0.5,1])(0.5,1)>>>plt.show()EnelcasoconcretodelIDESpydertenemoselObjectinspector.Siescribimosenlacajaobjectlapalabraquedeseamosprobablementeaparezcalaayudadeformaautomtica.Porejemplo,siquieroordenarunalistaynosecmo,podemosescribirsortyaparecerlaformadeutilizacin.AdemstantoenspydercomoenEclipse,alescribirelcomandonosaparecelaayudadeformaautomticacomopodemosverenlaFigura11Figura10.AyudaautomticauObjectinspectorenSpyder.2.6.1.MiprimerprogramaPor
tradicin se suele decir que un lenguaje de programacin es ms o
menos complicado cuanto ms nos
cuestaimplementarelHolaMundo,esdecir,imprimirenpantallaestasdospalabras.Pythonteniendoencuentaestecriterioesdeloslenguajesmsfcilesyaqueconunasolalneadecdigopodemosobtenerelresultadodeseado>>>print("HolaMundo")HolaMundosicomparamosconC++,#includeusingnamespacestd;intmain(){coutLosnombresdeloscreadoresdelprograma.Creacin>Fechadecreacindelprograma.Historia>Encasodemodificacinesposterioresesenestasecindondeseindicalamodificacin,lafechadelarealizacinyelautordelamisma.Dependencias>Mdulosnecesariosparalaejecucindelprograma.Porejemploscipy,matplotlib..Licencia>Apartadocorrespondientealosderechosdeautor.Comoseobserva,paraincluiruncomentarioseutilizaelcaracter#2.9.GeneracindeayudasEnelapartadodeAyudas(2.2.4)aprendimosautilizarelcomandohelpparaobtenerinformacinsobreelusodeundeterminado
comando. El resultado es una informacin muy valiosa que nosotros
debemos de aadir tambin anuestras funciones, programas etc. Es lo
que se denomina Docstring. Las ayudas se deben de incluir
inmediatamentedespes de la cabecera en el caso de ser una
descripcin general e inmediantamente despus de cualquier
funcin,clase, etc. La metodologa es simple, todo aquella informacin
que creamos necesaria para el Docstring debe de
irencerradaentreseisparesdecomillasdobles(tresalinicioytresalfinal).Ademsparafuncionesdeberemosdeincluirlossiguientesapartados:(Entradas)
> (salidas). Se enumeran el tipo de entrados que necesita como
entradas la funcin y el tipo
desalidasquenosdevolver,int,bool,float,etcDescripcin.Ecplicacindelafuncin.Explicacindecadaentrada.Explicacindecadasalida.Test.Ejemplosencilloconelresultadoquepuedaservircomocomprobadordelbuenusodelafuncincreada.Ejemplodeayudaparaunarchivogeneral,"""Descripcin:ArchivoplantillaparagenerarprogramasenPython."""Aunque
todava no hemos visto las funciones podemos ver un ejemplo de ayuda
en una funcin que nos devuelve
elsenodelnmeroqueentremos,deff1(x=3.3): """ *(float)>(float)
*Descripcin:Funcinquedevuelveelsenodeunenterodado. *Entradas:
x=entero. *Salidas: y=seno(entero) *Test:
>>>print("f1(0.7)") 0.64421768723769102 """ y=sp.sin(x)
returny2.10.CargadeMdulosEnPythonnoesnecesariodeclararlasvariables,locualsuponeunagransimplificacinrespectoaprogramascomoC.Sin
embargo para llamar a funciones y clases que no estn en el archivo
que se est ejecutando, es necesario decirlednde estn. Se pueden
declarar un mdulo, o llamar a sus funciones de diversas formas. En
los siguientes
ejemploscargamosalgunasotodaslasfuncionesdelmdulocientficoscipy.importscipyimportscipyasspfromscipyimport*fromscipyimportsinfromscipy.fftpackimportfftimportmatplotlib.pyplotaspltVeamoscomollamaramosalafuncionsindependiendolaformaenlaquehayamoscargadoscipyimportscipy>y=scipy.sin(x),Importamosscipyyllamamosalasfuncionesquetiene.importscipyassp>y=sp.sin(x),Renombramosscipyconunaliasmscorto.fromscipyimport*>y=sin(x),importamostodaslasfuncionesquecontienescipyfromscipyimportsin,cos>y=sin(x),importamosnicamentesinycosfromscipy.fftpackimportfft>Silosmdulossonmuylargos,sepuedenhacerenvariosarchivos.Entonceslasfuncionesoclasesestnanidadas.Estoesdegranutilidadporvariosmotivos:Permitenoestarpendientedelnombredelasfunciones,clases,etc.Sielnombreserepiteendosmdulos,nohayproblema,puessabemosaqumdulopertenecePermite
escribir cdigo de forma modular. Para utilizar en mdulo
desarrollado por otro programado,
porejemplooptica.py,lonicoquehayquehaceresllamarloantes,importoptica2.11.DefinicindefuncionesSeguidamentealasdeclaracionesdelosmdulossepuedenescribirlasfuncionesyclasesquevayamosautilizar.Estonosignificaqueelprogramavayaarealizarningunaaccin.Enelsiguientetemasevercmohayquedesarrollarelcdigoparacrearestasfuncionesyclases.UnaventajadePythonesqueenunmismoprograma(omdulo,segndefinamos)podemosescribirmuchasfuncionesyclasesalavez,porloquesesimplificalarevisindecdigoysumantenimiento.Asimismo,incluirvariasfuncionesenunmismoarchivopermitepoderpasarnuestrocdigoaotrosprogramadoresdeunaformasencilla.deff1(x=3.3):
""" *(float)>(float)
*Descripcin:Funcinquedevuelveelsenodeunenterodado. *Entradas:
x=entero. *Salidas: y=seno(entero) *Test:
>>>print("f1(0.7)") 0.64421768723769102 """ y=sp.sin(x)
returnydeff2(x=3): """ *(float)>(float)
*Descripcin:Funcinquedevuelveelsenodeunenterodado. *Entradas:
x=entero. *Salidas: y=cos(entero) *Test: >>print("f2(0.7)")
0.7648421872844885 """ y=sp.cos(x) returnyPython no utiliza
parntesis o llaves para decir qu cdigo pertenece a una funcin. Es
de esencial importancia
enPythonseguirunsistemadeindentacin.Esdecir,elcdigoqueestdentrodeunafuncintienequeestrindentadodentro
de la funcin como en el ejemplo anterior para que pertenezca a la
funcin. Para salirnos de la
funcin,simplementedesindentamoselcdigo.2.12.Cdigoejecutable:mainA
una funcin de Python se la puede llamar de dos formas: a travs de
otra funcin python o directamente. Elcomportamiento de la funcin
puede ser distinto por lo que se debe de tener cuidado. Si, por
ejemplo, tenemos
elsiguientecodigoalfinaldelarchivo:if__name__=='__main__':
#Creamoselarrayx x=sp.linspace(0,10,100)
#Calculamoselsenoyelcosenomediantelasfuncionescreadas. y1=f1(x)
y2=f2(x) #Dibujamoslasdosfuncionesenunanicafigura. plt.figure()
plt.plot(x,y1,'k',label='seno') plt.hold(True)
plt.plot(x,y2,'r',label='coseno')
plt.show()Llegadosaestepuntopodemosvernuestraprogramacompletoquenoservirdeplantillaparaelrestodeprogramasquecreemos,#!/usr/bin/envpython#*coding:utf8*from__future__importdivision##Nombre:ejemplo_estructura_programa.py#Propsito:Ejemplodearchivoconlaestructuradeunprograma##Origen:Propio#Autor:JosMar
aHerreraFernandezyLuisMiguelSanchezBrea##Creacin:12deSeptiembrede2013#Historia:##Dependencias:scipy,matplotlib#Licencia:GPL#"""Descripcin:ArchivoplantillaparagenerarprogramasenPython."""importscipyimportscipyasspfromscipyimport*fromscipyimportsinfromscipy.fftpackimportfftimportmatplotlib.pyplotaspltdeff1(x=3.3):
""" *(float)>(float)
*Descripcin:Funcinquedevuelveelsenodeunenterodado. *Entradas:
x=entero. *Salidas: y=seno(entero) *Test:
>>>print("f1(0.7)") 0.64421768723769102 """ y=sp.sin(x)
returnydeff2(x=3): """ *(float)>(float)
*Descripcin:Funcinquedevuelveelsenodeunenterodado. *Entradas:
x=entero. *Salidas: y=cos(entero) *Test: >>print("f2(0.7)")
0.7648421872844885 """ y=sp.cos(x) returnyif__name__=='__main__':
#Creamoselarrayx x=sp.linspace(0,10,100)
#Calculamoselsenoyelcosenomediantelasfuncionescreadas. y1=f1(x)
y2=f2(x) #Dibujamoslasdosfuncionesenunanicafigura. plt.figure()
plt.plot(x,y1,'k',label='seno') plt.hold(True)
plt.plot(x,y2,'r',label='coseno')
plt.show()Ejecutando,(Sourcecode,png,hires.png,pdf)2.13.SistemadeverificacindelcdigoEnelapartadodegeneracindeayudasvimosqueeraconvenienteaadirunapartadodeverificacindelalafuncinquellamamosTest.Sinembargo,enocasioneslasfuncionessondemasiadogradesparaaadiresteapartado.Enestasocasioneslasolucinessimple,noscreamosotrafuncinqueinvoquealaprimeraproporcionandodatosconocidos.Deestaformacontinuaremosprobandoelbuenfuncionamientodenuestrafuncinsinelinconvenientedelespacio.ANTERIOR|SIGUIENTEMOSTRARELCDIGOCopyright2013,LuisMiguelSnchezBrea.CreadoconSphinx