Transcript

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


Top Related