Documente Academic
Documente Profesional
Documente Cultură
enasignaturasdecienciasaplicadas
A N TER IO R |S IG U IEN T E
2.PuestaenMarcha
TABLADECONTENIDOS
Autores
Autores:JosMaraHerreraFernndez,LuisMiguelSnchezBrea
Contenidosdeestecaptulo:
Quesnuevo
Licencia
Windows
Linux
TrabajarconPython
Consolas
IDEs
Pythonpath
Ayudas
Miprimerprograma
Estructuradeunprograma.py
Autoejecucin
Cabecera
Generacindeayudas
CargadeMdulos
Definicindefunciones
Cdigoejecutable:main
Sistemadeverificacindelcdigo
Descargas
Referencias
1.Introduccin
2.PuestaenMarcha
3.LenguajesdeProgramacin
4.MdulosCientficos
5.EcuacionesdeMaxwellenelvaco
6.Polarizacin
7.Interaccinradiacinmateria
8.ndicederefraccin:modelomicroscpico
9.EcuacionesdeFresnel
10.Pulsosdeluz
11.Interferencias
12.Mdulosdeptica
13.Difraccinencampocercano
Como en casi todos los programas, dependiendo del sistema operativo del que disponga nuestro ordenador la
instalacindesoftwarevariarligeramenteyPythonnoesunaexcepcin.Afindequeelsistemaoperativonosuponga
unbacheennuestrocaminohaciaelaprendizajedePython,enestaseccinveremoslainstalacinpasoapasoenlos
dossistemasoperativosmsextendidosenlaactualidad.Paraotrossistemasoperativosrecomendamosallectorqueen
casodedudaacudaalagranbibliografaexistenteenlared.
2.1.Windows
14.Difraccinencampolejano
15.RedesdeDifraccin
16.Procesadopticodelainformacin
BSQUEDA
Ira
AlahoradeinstalarPythonenelsistemaoperativodeMicrosofttenemosdosopcionessegnelusoquevayamosa
hacer del lenguaje de programacin. Por una parte, como ya hemos mencionado en la introduccin, Python es un
leguanjedeprogramacindeusogeneralporloque,sisteeselcaso,recomendamoslainstalacindelpaquetebsico
eincorporarlosmdulosquenecesitemos.EnelsitiooficialdePhythonenlaseccindedescargaspodemosencontrar
diferentes versiones. En la actualidad conviven las versiones 3.3.* y 2.7.* donde * es la ltima versin estable. Las
instalaciones de este libro fueron realizadas con la versin 2.7.2 aunque no vara sustancialmente para versiones
posteriores.Porotraparte,comolaprogramacinquevamosarealizarestorientadaalmbitocientficoacadmicoe
ingenieril, la opcin que ms se ajusta a nuestros intereses es el paquete Python(x,y).Python(x,y) es un software de
desarrollo gratuito que incorpora los principales mdulos necesarios para clculo numrico junto con algn otro
complementoqueanalizaremosposteriormente.LainstalacinessimilaraotrosprogramasdeWindows.Loprimero
quedebemosdehaceresdescargarmoslaltimaversindelprogramadesdelaseccindedescargasdelaweboficial,
http://code.google.com/p/pythonxy/wiki/Downloads?tm=2.
EnlaFigura2podemosverqueenelmismoenlacedisponemosdelasnotasdeinstalacinquerecomendamosrepasar
antesdeiniciarelproceso.Sonunos420MB(yaquetienebastantesaplicaciones).Unavezinstaladoobservaremos
como nuestros archivos con extensin .py se asocian con python por lo que si pinchamos dos veces sobre ellos se
ejecutarn.
Introduzcalostrminosdebsquedaounnombrede
mdulo,claseofuncin.
Figura2.DescargadePython(x,y)desdelaseccincorrespondienteenlaweboficial.Enlasmismapginapodemos
encontrarlasnotasdeinstalacinquedebemosdetenerencuenta.
2.2.Linux
Pythonvieneincorporadoenlamayoradelasdistribucionesexistentes.Sienunaterminalejecutamoselcomando
pythonV
comprobaremosqueversindePythontenemosinstalada.Encasodenoseraspodemosinstalarloejecutando
aptgetinstallpython
Otra opcin es, por ejemplo, desde el centro de software en Ubuntu. Basta con buscar python en el lugar
correspondiente y nos indicar si lo tenemos instalado y si queremos instalarlo o desistalarlo. Para instalar nuevos
mdulossepuedeseguirelmismoprocedimientoyaseadesdelaterminalodesdeelcentrodesoftware.
2.2.1.TrabajarconPython
Alahoradeiniciarseenlaprogramacinesmuyimportanteconocerlasintasisdellenguajequesevaautilizarpara
desarrollar codigo de una manera correcta. De igual importancia es conocer las herramientas de las que disponemos
paraejecutarydepurarelcdigodesarrollado.
2.3.Consolas
Desde el mismo momento en el que Python se instala en el sistema podemos empezar a programar abriendo una
consolainteractivaenunaterminal.Laconsolainteractivamssencillaseejecutadirectamenteenunterminal(Linux)
escribiendo
python
Inmediantamente podremos ir introduciendo lineas de comandos y ejecutar de una en una. En Windows la forma es
equivalente.
Existenconcolasinteractivasmscompletasquenosvanindicandoayudasinmediatasamedidaquevamosescribiendo
cdigo.Seintroducelainstruccionyseejecutadeunaenuna.Estaformadeprogramacinesadecuadacuandosomos
principiantes y estamos desarrollando programas cortos donde nos interesa ver inmediatamente si el resultado es
correctoono.
2.4.IDEs
Lasconsolasnoeselmejorprocedimientoparadesarrollarprogramasextensos.Elcdigoescritoenlaconsolanoes
fcildeseguirydevolverautilizar.UnaprogramacineficazserealizamedianteunEntornodeDesarrolloIntegrado
(IDE, Integrated Developed Environment). Con este acrnimo ingls se describe a toda aplicacin de sofware que
proporcionaunafacilidadcomprensivaalahoradelacreacindeprogramasinformticosseaenellenguajequesea.
NormalmenteunIDEconstadeuneditordecdigofuente,uncompliadory/ounintrprete,herramientasdecreaciny
undepurador.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 modo
depuracinaunqueparaprogramadoresexperimentadossequedabastantecorto.LainstalacinenWindowsse
realizaconlainstalacindelpropiolenguajemientrasqueenelrestodeSOlainstalacinserealizadelaforma
usual. Para ms informacin podemos consultar la documentacin oficial en el siguiente enlace:
http://docs.python.org/2/library/idle.html.EnlaFigura3semuestraunejemplodecreacindeunarrayenla
consoladeIDLE.
Figura3.ConsoladeIDLE.
Spyder:SpyderesunIDEespecficoparaPythonorientadoacientficosydesarrolloingenierilconunainterfaz
muysimilaraMatlab,porloqueeslaopcinmsadecuadacuandosequieremigrardeMatlabaPython.Si
hemosinstaladoPython(x,y),aliniciarelprogramasenosabreunaventanacondiversascaractersitcas.Dentro
de la pestaa Shortcuts nos encontramos el apartado Spyder. Bastar con pinchar en el smbolo del
programa(Figura4)einmediatamentesenosabriraelprograma.Comosiempre,sinosencontramosenlinux
abrimosunaterminalyejecutamoslaorden
sudoaptgetinstallspyder
ytrasunossegundosnosaparecercomoopcinennuestromenu.
Figura4.SpyderenPython(X,Y).Parainiciarelprogramapinchamosenelsmboloresaltadoenlaimagen.
Al iniciar el programa por primera vez vemos que, si hemos sido usuarios de MATLAB, efectivamente nos
encontramosenunentornofamiliar.EnlaFigura5vemosqueenlazonaizquierdadelapantallatenemosuneditorde
cdigo. En la zona central nos encontramos un navegador con nuestros programas y en la zona derecha tenemos la
ayudaylaconsolainteractiva.
Figura5.Spyderconsusdiferentessecciones.
ParamsinformacinpodemosconsultarelmanualoficialdelIDEenhttp://packages.python.org/spyder/
Eclipse:Eclipseesunprogramainformticocompuestoporunconjuntodeherramientasdeprogramacinde
cdigoabiertomultiplataformaparadesarrollarloqueelproyectollamaAplicacionesdeClienteEnriquecido,
opuestoalasaplicacionesClientelivianobasadasennavegadores.Estaplataforma,tpicamentehasidousada
paradesarrollarIDEs,comoelIDEdeJavallamadoJavaDevelopmentToolkit(JDT).Eclipsepuedeserusado
conPythonmediantelainstalacindePydev.PydevesunIDEparaEclipsemuycompletoyconfigurablecon
unmododedepuracinextraordinariamentepotente.DelostresIDEsquehemosvisto,steeselentornoms
complicadoporlacantidaddeopcionesquecontiene.Sinembargoparaelprogramadoravanzadoserelque
mscomodoleresultealahoraderealizarsusprogramas.
Si nos encontramos en el sistema operativo de Microsoft, lo primero que debemos hacer es decargarnos la ultima
versindelprogramaenelsitiooficial,http://www.eclipse.org/downloads/.Enlinux,
sudoaptgetinstalleclipse
TantoenlinuxcomoenWindowssinolostenemosdebemosinstalarlaultimaversindeJavaDevelopmentKit(JDK)
yelJavaRuntimeEnvironment(JRE).ParaconfigurarPyDevenEclipsedebemosdeseguirlossiguientespasos:
1. Abrimos Eclipse y nos vamos a Help > Install New Software. En la pantalla emergente aadimos
http://pydev.org/updatesenelcampoworkwith.
Figura6.InstalaciondePydevenEclipse.
2. PulsamosenAdd,esperamosaqueactualizeelcampodeabajoparapoderseleccionarPyDev,luegopulsamos
enNext,yseguimoselasistenteparacompletarlainstalacin.
Figura7.InstalaciondePydevenEclipse.
3. ReiniciamosEclipse.
4. AhoradeberemosespecificardndeseencuentraelinterpretedepythonenlaspreferenciasEclipse,paraello
nosvamosaEclipse>preferences>PyDev>Interpreter>Python.PulsamosenautoConfig, marcamos
todo(sinoloest)yaceptamos.
Figura8.InstalacindePydevenEclipse.
En este caso tambin tenemos a nuestra disposicin un manual oficial muy completo en
http://pydev.org/manual_101_root.html. Si hemos realizado todos los pasos correctamente podremos ejecutar
programas realizados en python sin ningn problema. En la Figura [figEclipse] podemos ver un ejemplo de la
disposicin de las secciones en Eclipse. Estas seccciones son totalmente configurables por lo que dependiendo de
vuestraspreferenciaslaimagenpuedeonocoincidirconvuestradisposicin.
Figura9.EclipseconPydevconfigurado.
2.5.Pythonpath
Dependiendo el IDE elegido se nos habr creado una carpeta como directorio de trabajo. Sin embargo en ocasiones
puedeinteresarnostrabajarconarchivosfueradeestedirectorio.Paraellodebemosdeaadirlanuevarutadenuestros
archivos.EstaoperacinserealizaenPythonpath.
Spyder:
Tools>PYTHONPATHmanager.
Sebuscaeldirectoriodondetenemoslosprogramas.
Eclipse:
Project>Properties>PydevPYTHONPATH.
Sebuscaeldirectoriodondetenemoslosprogramas.
Figura10.CargadelosdirectoriosenelPythonpath,paraeclipse.
2.6.Ayudas
Lascomandosdeloslenguajesdeprogramacinsonprcticamenteinfinitosy,slomedianteprctica,conseguiremos
aprendernosalgunosdeellos.Sinembargo,enlamayoradeloscasosdebereosacudiraladocumentacinoficialpara
resolvernuestrasdudas.Normalmentecadalenguajedeprogramacintienealgncomandoespecficoparaaccederala
informacinquenosinterese.AdemsmuchosdelosIDEfacilitanelaccesoaestainformacinmediantealgnacceso
directo o alguna ventana permanente. En general los pasos a seguir cuando no sabemos qu comando utilizar o la
sintaxisdesuutilizacinsonlossiguientes.
Google.Elbuscadordeinformacineninternetporexcelencia.Enalgunasocasionesnosabremosmuybienpor
dondeempezaronossabremoselcomandoequivalenteenotrolenguajedeprogramacin.Siellectorhatenido
esa duda seguramente otra persona la haya tenido antes por lo que podremos encontrar la respuesta sin
demasiadoesfuerzo.
Medianteelusodecomandosespecificos.Comohemosmencionado,cadalenguajedeprogramacintieneuna
serie de comandos para accecer a la informacin de los comandos acerca de los cuales tengamos dudas. Por
ejemplosienunaconsolatecleamos
importnumpyasnp
help(np.linspace)
obtendremoslainformacindelinspaceenlamismaconsola,
Helponfunctionlinspaceinmodulenumpy.core.function_base:
linspace(start,stop,num=50,endpoint=True,retstep=False)
Returnevenlyspacednumbersoveraspecifiedinterval.
Returns`num`evenlyspacedsamples,calculatedoverthe
interval[`start`,`stop`].
Theendpointoftheintervalcanoptionallybeexcluded.
Parameters
start:scalar
Thestartingvalueofthesequence.
stop:scalar
Theendvalueofthesequence,unless`endpoint`issettoFalse.
Inthatcase,thesequenceconsistsofallbutthelastof``num+1``
evenlyspacedsamples,sothat`stop`isexcluded.Notethatthestep
sizechangeswhen`endpoint`isFalse.
num:int,optional
Numberofsamplestogenerate.Defaultis50.
endpoint:bool,optional
IfTrue,`stop`isthelastsample.Otherwise,itisnotincluded.
DefaultisTrue.
retstep:bool,optional
IfTrue,return(`samples`,`step`),where`step`isthespacing
betweensamples.
Returns
samples:ndarray
Thereare`num`equallyspacedsamplesintheclosedinterval
``[start,stop]``orthehalfopeninterval``[start,stop)``
(dependingonwhether`endpoint`isTrueorFalse).
step:float(onlyif`retstep`isTrue)
Sizeofspacingbetweensamples.
SeeAlso
arange:Similiarto`linspace`,butusesastepsize(insteadofthe
numberofsamples).
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')
[<matplotlib.lines.Line2Dobjectat0x...>]
>>>plt.plot(x2,y+0.5,'o')
[<matplotlib.lines.Line2Dobjectat0x...>]
>>>plt.ylim([0.5,1])
(0.5,1)
>>>plt.show()
EnelcasoconcretodelIDESpydertenemoselObjectinspector.Siescribimosenlacajaobjectlapalabraque
deseamosprobablementeaparezcalaayudadeformaautomtica.Porejemplo,siquieroordenarunalistayno
secmo,podemosescribirsortyaparecerlaformadeutilizacin.AdemstantoenspydercomoenEclipse,
alescribirelcomandonosaparecelaayudadeformaautomticacomopodemosverenlaFigura11
Figura10.AyudaautomticauObjectinspectorenSpyder.
2.6.1.Miprimerprograma
Por tradicin se suele decir que un lenguaje de programacin es ms o menos complicado cuanto ms nos cuesta
implementarelHolaMundo,esdecir,imprimirenpantallaestasdospalabras.Pythonteniendoencuentaestecriterio
esdeloslenguajesmsfcilesyaqueconunasolalneadecdigopodemosobtenerelresultadodeseado
>>>print("HolaMundo")
HolaMundo
sicomparamosconC++,
#include<iostream>
usingnamespacestd;
intmain(){
cout<<"HolaMundo"<<endl;
return0;
}
vemosqueelcdigoesnotablementemslargo.Porcuriosidadyamododeavanceparaeltemasiguientepodemos
vercomoserepresentaunagrficasimplecomoladelsenoenPython,
#!/usr/bin/envpython
#*coding:utf8*
#Cargadelosmdulosnecesarios
importscipyassp
importmatplotlib.pyplotasplt
#Creamoselarrayxdeceroacienconcienpuntos
x=sp.linspace(0,10,100)
#Creamoselarrayycondecadapuntoeselsenodecadaelementodex
y=sp.sin(x)
#Creamosunafigura
plt.figure()
#Representamos
plt.plot(x,y)
#Mostramosenpantalla
plt.show()
(Sourcecode,png,hires.png,pdf)
2.6.2.Estructuradeunprograma.py
EnlaseccinanteriorhemospodidocomprobarlosencilloylegiblequeesunprogramaPython.Noobstante,conel
fin de que el cdigo sea lo ms comprensible posible para cualquiera que se disponga a utilizarlo o modificarlo se
suelenaadirporconveniounaseriedeapartadosylneasdecdicocomplementariasquefacilitansucomprensin.
As,comonormalgeneraltodosnuestrosprogramasdePythondebentenerlossiguientesapartados
2.7.Autoejecucin
#!/usr/bin/envpython
#*coding:utf8*
from__future__importdivision
Laprimeralneadecdigosirveparadeciralsistemaoperativoqueestearchivosepuedeejecutar,esdecir,si
se hace click sobre el archivo, se llama al programa python y se ejecuta. Es el equivalente a los archivos
ejecutables.exeenWindows,aunqueaquelprogramanoestcompilado,sinoqueseinterpreta(estoltimoes
mslento).
La segunda lnea de cdigo sirve para poder utilizar la codificacion utf8. De esta forma podemos poner
acentos,,etc.
Laterceralneadecdigocargaunmduloadicionalquepermitequeladivisinentrenmerosenterospueda
darnmerosfraccionarios.AlserPythonunlenguajedepropsitogeneralladivisinentreenterosdalugara
enteros, lo cual suele ser problematico en clculos cientficos. NOTA: Tambin se puede solucionar
escribiendo,enlugarde3/4,3./4,perodeestaformaelriesgodecometererroresporestacausaesmenor.
2.8.Cabecera
#Nombre:ejemplo_estructura_programa.py
#Propsito:Ejemplodearchivoconlaestructuradeunprograma
#
#Origen:Propio
#Autor:JosMar
aHerreraFernandezyLuisMiguelSanchezBrea
#
#Creacin:12deSeptiembrede2013
#Historia:
#
#Dependencias:scipy,matplotlib
#Licencia:GPL
Esta seccin es estrictamente voluntaria, sin embargo es muy til cuando varios usuarios programan en el mismo
archivo.
Nombre > El nombre del archivo que vamos a crear cuando guardemos por primera vez. En nuestro caso
ejemplo_estructura_programa.py.
Propsito > La finalizad que se persigue al crear el programa, * Crear grfica del seno*, * Calcular los
coeficientesdeunpolinomio*,etc.
Origen > Si el origen del programa no es propio conviene saber su procedencia por si se debe consultar de
nuevolafuenteoriginalenunfuturo.
Autor(es)>Losnombresdeloscreadoresdelprograma.
Creacin>Fechadecreacindelprograma.
Historia>Encasodemodificacinesposterioresesenestasecindondeseindicalamodificacin,lafechade
larealizacinyelautordelamisma.
Dependencias>Mdulosnecesariosparalaejecucindelprograma.Porejemploscipy,matplotlib..
Licencia>Apartadocorrespondientealosderechosdeautor.
Comoseobserva,paraincluiruncomentarioseutilizaelcaracter#
2.9.Generacindeayudas
EnelapartadodeAyudas(2.2.4)aprendimosautilizarelcomandohelpparaobtenerinformacinsobreelusodeun
determinado comando. El resultado es una informacin muy valiosa que nosotros debemos de aadir tambin a
nuestrasfunciones,programasetc.EsloquesedenominaDocstring.Lasayudassedebendeincluirinmediatamente
despes 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 ir
encerradaentreseisparesdecomillasdobles(tresalinicioytresalfinal).Ademsparafuncionesdeberemosdeincluir
lossiguientesapartados:
(Entradas) > (salidas). Se enumeran el tipo de entrados que necesita como entradas la funcin y el tipo de
salidasquenosdevolver,int,bool,float,etc
Descripcin.Ecplicacindelafuncin.
Explicacindecadaentrada.
Explicacindecadasalida.
Test.Ejemplosencilloconelresultadoquepuedaservircomocomprobadordelbuenusodelafuncincreada.
Ejemplodeayudaparaunarchivogeneral,
"""
Descripcin:ArchivoplantillaparagenerarprogramasenPython.
"""
Aunquetodavanohemosvistolasfuncionespodemosverunejemplodeayudaenunafuncinquenosdevuelveel
senodelnmeroqueentremos,
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)
returny
2.10.CargadeMdulos
EnPythonnoesnecesariodeclararlasvariables,locualsuponeunagransimplificacinrespectoaprogramascomoC.
Sinembargoparallamarafuncionesyclasesquenoestnenelarchivoqueseestejecutando,esnecesariodecirle
dndeestn.Sepuedendeclararunmdulo,ollamarasusfuncionesdediversasformas.Enlossiguientesejemplos
cargamosalgunasotodaslasfuncionesdelmdulocientficoscipy.
importscipy
importscipyassp
fromscipyimport*
fromscipyimportsin
fromscipy.fftpackimportfft
importmatplotlib.pyplotasplt
Veamoscomollamaramosalafuncionsindependiendolaformaenlaquehayamoscargadoscipy
importscipy>y=scipy.sin(x),Importamosscipyyllamamosalasfuncionesquetiene.
importscipyassp>y=sp.sin(x),Renombramosscipyconunaliasmscorto.
fromscipyimport*>y=sin(x),importamostodaslasfuncionesquecontienescipy
fromscipyimportsin,cos>y=sin(x),importamosnicamentesinycos
fromscipy.fftpackimportfft>Silosmdulossonmuylargos,sepuedenhacerenvariosarchivos.Entonces
lasfuncionesoclasesestnanidadas.
Estoesdegranutilidadporvariosmotivos:
Permitenoestarpendientedelnombredelasfunciones,clases,etc.Sielnombreserepiteendosmdulos,no
hayproblema,puessabemosaqumdulopertenece
Permite escribir cdigo de forma modular. Para utilizar en mdulo desarrollado por otro programado, por
ejemplooptica.py,lonicoquehayquehaceresllamarloantes,importoptica
2.11.Definicindefunciones
Seguidamentealasdeclaracionesdelosmdulossepuedenescribirlasfuncionesyclasesquevayamosautilizar.Esto
nosignificaqueelprogramavayaarealizarningunaaccin.Enelsiguientetemasevercmohayquedesarrollarel
cdigoparacrearestasfuncionesyclases.
UnaventajadePythonesqueenunmismoprograma(omdulo,segndefinamos)podemosescribirmuchasfunciones
yclasesalavez,porloquesesimplificalarevisindecdigoysumantenimiento.Asimismo,incluirvariasfunciones
enunmismoarchivopermitepoderpasarnuestrocdigoaotrosprogramadoresdeunaformasencilla.
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)
returny
deff2(x=3):
"""
*(float)>(float)
*Descripcin:Funcinquedevuelveelsenodeunenterodado.
*Entradas:
x=entero.
*Salidas:
y=cos(entero)
*Test:
>>print("f2(0.7)")
0.7648421872844885
"""
y=sp.cos(x)
returny
Python no utiliza parntesis o llaves para decir qu cdigo pertenece a una funcin. Es de esencial importancia en
Pythonseguirunsistemadeindentacin.Esdecir,elcdigoqueestdentrodeunafuncintienequeestrindentado
dentro de la funcin como en el ejemplo anterior para que pertenezca a la funcin. Para salirnos de la funcin,
simplementedesindentamoselcdigo.
2.12.Cdigoejecutable:main
A una funcin de Python se la puede llamar de dos formas: a travs de otra funcin python o directamente. El
comportamiento de la funcin puede ser distinto por lo que se debe de tener cuidado. Si, por ejemplo, tenemos el
siguientecodigoalfinaldelarchivo:
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()
Llegadosaestepuntopodemosvernuestraprogramacompletoquenoservirdeplantillaparaelrestodeprogramas
quecreemos,
#!/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.
"""
importscipy
importscipyassp
fromscipyimport*
fromscipyimportsin
fromscipy.fftpackimportfft
importmatplotlib.pyplotasplt
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)
returny
deff2(x=3):
"""
*(float)>(float)
*Descripcin:Funcinquedevuelveelsenodeunenterodado.
*Entradas:
x=entero.
*Salidas:
y=cos(entero)
*Test:
>>print("f2(0.7)")
0.7648421872844885
"""
y=sp.cos(x)
returny
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()
Ejecutando,
(Sourcecode,png,hires.png,pdf)
2.13.Sistemadeverificacindelcdigo
Enelapartadodegeneracindeayudasvimosqueeraconvenienteaadirunapartadodeverificacindelalafuncin
quellamamosTest.Sinembargo,enocasioneslasfuncionessondemasiadogradesparaaadiresteapartado.Enestas
ocasioneslasolucinessimple,noscreamosotrafuncinqueinvoquealaprimeraproporcionandodatosconocidos.
Deestaformacontinuaremosprobandoelbuenfuncionamientodenuestrafuncinsinelinconvenientedelespacio.
ANTERIOR|SIGUIENTE
MOSTRARELCDIGO
Copyright2013,LuisMiguelSnchezBrea.CreadoconSphinx