0% encontró este documento útil (0 votos)
5 vistas8 páginas

Pythoninstantaneo PDF

Cargado por

DiegoGonzales
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
5 vistas8 páginas

Pythoninstantaneo PDF

Cargado por

DiegoGonzales
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

MinimanualdePython

Ahora,algototalmentediferente...

Pythoninstantneo

porMagnusLieHetland

[Link],echa
unvistazoaladocumentacindelwebdePython,[Link]
deberainteresarte,miralapginadecomparacin,enlaqueaparecePythoncomparadoconotroslenguajes.

Estaintroduccinharecibidograncantidaddealabanzasdelectoressatisfechosyesttraducidaavariosidiomas,entreellos
portugus,ruso,[Link],eningls,estaqu.

(PginaprincipaldePython)

[Link]
Paraempezar,[Link],asquenohayque
[Link]
operador=.Paracomprobarlaigualdadseutilizaeloperador==.Sepuedeasignarvariasvariablesalavez:

x,y,z = 1,2,3
primero, segundo = segundo, primero
a = b = 123

Paradefinirbloquesdecdigo,seutilizaelsangrado(oindentacin)solamente(nadadeBEGIN/ENDnillaves).stasson
algunasestructurasdecontrolcomunes:

if x < 5 or (x > 10 and x < 20):


print "El valor es correcto."
if x < 5 or 10 < x < 20:
print "El valor es correcto."
for i in [1,2,3,4,5]:
print "Pasada n ", i

x = 10
while x >= 0:
print "x todava no es negativo."
x = x-1

Losdosprimerosejemplossonequivalentes.

Lavariabledendiceenelbucleforrecorreloselementosdeunalista(escritacomoenelejemplo).Pararealizarunbucle
for"normal"(esdecir,contando),utilicelafuncindeserierange().

# Mostrar los valores de 0 a 99 inclusive.


for valor in range(100):
print valor

(Lalneaquecomienzapor"#"esuncomentarioyelintrpretelehacecasoomiso)

Vale,[Link].
Paraobtenerentradadelusuario,deunindicadordetexto,utilizalafuncindeserieinput.

x = input("Introduzca un nmero:")
print "El cuadrado de ese nmero es:", x*x
Lafuncininputmuestralasolicituddada(quepodraestarvaca)ypermitequeelusuariointroduzcacualquiervalor
[Link],siseintroducealgodiferente(unacadena,porejemplo),elprograma
[Link],valgadecirquesi
quiereguardarloqueelusuariohaintroducidotextualmentecomouncadena(paraquesepuedaintroducircualquier
cosa),utilicelafuncinraw_input.Sideseaconvertirlacadenadeentradasaunentero,podrautilizarint(s).

Nota:Sideseaintroducirunacadenaconinput,[Link],lascadena
puedenencerrarseentrecomillassimplesodobles.

Asquetenemoscubiertaslasestructurasdecontrol,[Link]
impresionantes?.[Link],ysepueden
(porsupuesto)anidar:

nombre = ["Cleese", "John"]


x = [[1,2,3],[y,z],[[[]]]]

Unadelasventajasdelaslistasesquesepuedeaccederasuselementosporseparadooengrupos,medianteindexadoy
[Link](comoenmuchosotroslenguajes)aadiendoelndiceentrecorchetesalalista(observaqueel
primerelementoesel0).

print nombre[1], nombre[0]


Muestra "John Cleese"
nombre[0] = "Palin"

Elcorteescasicomoelindexado,peroseindicanlosndicesdeinicioyfindelresultado,condospuntos(":")de
separacin:

x = ["magro","magro","magro","magro","magro","huevos","and","magro"]
print x[5:7]
Muestra la lista ["huevos","and"]

[Link]
[Link],lista[:3]quieredecir"cadaelementodesdeelprincipiodelistahastael
elemento3,noincluido".(sepodradecirenrealidadelelemento4,yaquecontamosdesde0...bueno).lista[3:]
significara,porotraparte"cadaelementodelista,empezandoporel3(inclusive),hastaelltimoinclusive".Sepueden
utilizarnmerosnegativosparaobtenerresultadosmuyinteresantes:lista[-3]eseltercerelementodesdeelfinaldela
lista...

Yaqueestamoseneltemadelindexado,puedesencontrarinteresantequelafuncindeserielendlalongituddeunalista.

Yahora,qupasaconlosdiccionarios?Paraserbreves,soncomolistas,[Link]
indexan,entonces?Bueno,cadaelementotieneunaclaveo"nombre"queseutilizaparabuscarelelemento,comoenun
[Link]:

{ "Alicia" : 23452532, "Boris" : 252336, "Clara" : 2352525 }


persona = { 'nombre': "Robin", 'apellido': "Hood",
'trabajo u ocupacin': "Ladrn" }

Ahora,paraobtenerlaocupacindepersona,utilizamoslaexpresinpersona["trabajo u ocupacin"].Sile
queremoscambiarelapellido,escribiremos:

persona['apellido'] = "de Locksley"

Simple,no?Comolaslistas,[Link],yaquenosponemos.Y
naturalmente,[Link],sepuedenconseguirestructurasdedatos
bastanteavanzadas.

[Link]
Prximopaso:[Link]
palabras,queremosdefinirunafuncin(o"procedimiento").[Link]:
def cuadrado(x):
return x*x
print cuadrado(2)
Muestra 4

Paralosqueloentendis:TodoslosparmetrosenPythonsepasanporreferencia(como,porejemplo,enJava).Paralos
queno,noospreocupis:).

Pythontienetodotipodelujos,comoargumentosconnombreyargumentosporomisinypuedemanejarunnmero
[Link],consultalaseccin4.7delatutoradePython.

Sisabeutilizarlasfuncionesengeneral,estoesloquenecesitasabersobreellasenPython,bsicamente(ah,s,lapalabra
clavereturndetienelaejecucindelafuncinydevuelveelresultadoindicado).

Algoquepodraresultarinteresanteconocer,sinembargo,[Link],sitieneuna
funcincomocuadrado,podrahacercosascomo:

cosa = cuadrado
cosa(2)
Muestra 4

Parallamaraunafuncinsinargumentosdebesrecordarescribirhazlo()[Link]
funcinens,comovalor(estovaletambinparalosmtodosdelosobjetos...leelosiguiente).

[Link]...
Supongoquesabescmofuncionalaprogramacinorientadaaobjetos(deotromodo,estaseccinpodraresultarunpoco
confusa,peronoimporta,empiezaajugarconlosobjetos:)).EnPythonsedefinenlasclasesconlapalabraclave
(sorpresa!)class,deestemodo:

class Cesta:
# Recuerde siempre el argumento self
def __init__(self,contenido=None):
[Link] = contenido or []
def aadir(self,elemento):
[Link](elemento)
def muestra_me(self):
resultado = ""
for elemento in [Link]:
resultado = resultado + " " + `elemento`
print "Contiene:"+resultado

Cosasnuevas:

1. Todoslosmtodos(funcionesdeunobjeto)recibenunargumentoadicionalalprincipiodelalistadeargumentos,que
[Link],porconvencin,sesuelellamarself(quesignifica'unomismo'),comoen
elejemplo.
2. Alosmtodosselosllamadeestemodo:[Link](arg1,arg2).
3. Algunonombresdemtodo,como__init__estnpredefinidos,ysignificancosasespeciales.__init__esel
nombredelconstructordelaclase,esdecir,eslafuncinalaquesellamacuandocreasunainstancia.
4. Algunosargumentossonopcionalesyrecibenunvalordado(segnlomencionadoantes,enlaseccindefunciones).
Estoserealizaescribiendoladefinicinas:

def magro(edad=32): ...

Aqu,[Link],elparmetroedadtendrelvalor
32.

5. "Lgicadecortocircuito."Estoesunpunto...Vermstarde.
6. Lascomillasinvertidasconviertenunobjetoensurepresentacincomocadena(asquesielementocontieneel
nmero1,`elemento`eslomismoque"1"mientrasque'elemento'esunacadenaliteral).
7. Elsignoms+[Link](loquesignificaque
sepuedeutilizarindexado,corteylafuncinlenenellaschulo,eh?).

Ningnmtodoovariablemiembroesprotegido(niprivado,ninadadeeso)[Link],ensumayora,
cuestindeestiloalprogramar.

Retomandoeltemadelalgicadecortocircuito...

[Link],losms"vacos",como[],0,""yNone
representanelvalorlgico"falso",mientraselresto(como[0],1or"Hola, mundo")representanelvalorlgico
"verdadero".

Lasexpresioneslgicascomoa and bseevalandeestemodo:Primero,[Link],


[Link],simplementesedevuelveb(querepresentaelvalorlgicodelaexpresin).Lalgica
correspondienteaa or bes:Siaesverdadero,[Link],devolverb.

Estemecanismohacequeandyorsecomportencomolosoperadoreslgicosquesupuestamenteimplementan,pero
[Link],elcdigo

if a:
print a
else:
print b

Sepuedesustituirpor:

print a or b

Dehecho,estoescasiun'deje'enPython,[Link]
Cesta.__init__.ElargumentocontenidotieneelvalorpordefectoNone(quees,entreotrascosas,falso).Porlotanto,
paracomprobarsitenavalor,podramosescribir:

if contenido:
[Link] = contenido
else:
[Link] = []

Porsupuesto,ahoraconocemosunmtodomejor,Y,porqunoledamoselvalorporomisin[]paraempezar?Porel
modoenquefuncionaPython,[Link]
comoseempezaraallenarunadeellas,todastendranlosmismoselementosyelvalorporomisindejaradeservaco...
Parainformarsesobreeltema,leeladocumentacinybuscaladiferenciaentreidentidadeigualdad.

Otromododehacerloanteriores:

def __init__(self, contenido=[]):


[Link] = contenido[:]

Adivinascmofuncionaesto?Enlugardeutilizarlamismalistavacasiempre,utilizamoslaexpresincontenido[:]para
hacerunacopia(hacemosuncortequecontienetodalalista).

Asque,parahacerrealmenteunaCestayutilizarla(esdecir,llamaraalgunodesusmtodos)haramosalgoas:

b = Cesta(['manzana','naranja'])
[Link]("limn")
b.muestra_me()

Haymsmtodosmgicosademsde__init__.Unodeelloses__str__,quedefineelaspectoquequieretenerel
objetosiseletratacomounacadena.Loutilizaramosennuestracestaenlugardepresenta_me:

def __str__(self):
resultado = ""
for elemento in [Link]:
resultado = resultado + " " + `elemento`
return "Contiene:"+resultado

Y,siquisiramosmostrarlacestab,simplementediramos:

print b

chulo,eh?

Laherenciaserealizadeestemodo:

class CestaMagro(Cesta):
# ...

Pythonpermitelaherenciamltiple,asquepuedeindicarvariassuperclasesentrelosparntesis,[Link]
clasesseinstancianas:x = Cesta().Losconstructoressedefinen,comodije,implementandolafuncinmiembroespecial
__init__.PongamosqueCestaMagrotuvieraunconstructor__init__(self,tipo).Podrarealizarunacestademagro
as:y = CestaMagro("manzanas").

SinecesitasellamaralconstructordeunasuperclasedesdeelconstructorHdeCestaMagro,loharaas:
Cesta.__init__(self).Observeque,ademsdeproporcionarlosparmetrosnormales,debeproporcionar
explcitamenteself,yaque__init__delasuperclasenosabeconquinstanciaesttratando.

ParaobtenermsinformacinsobrelasmaravillasdelaprogramacinorientadaaobjetosenPython,mirelaseccin9dela
tutora.

[Link]
([Link])

Tegustanlosejerciciosmentales?Siesas,sieresrealmenteosado,deberasecharleunvistazoalensayodeGuidovan
[Link],porelcontrario,prefieresqueelcerebronoteexplote,igualtesatisfaceestetruquito.

Pythonutilizaespaciosdenombresdinmicos(nolxicos).Estoquieredecirquesitienesunafuncincomosta:

def zumo_naranja():
return x*2

...dondeunavariable(enestecasox)noestligadaaunargumento,ynoseleasignaunvalordesdedentrodelafuncin,
[Link]:

x=3
zumo_naranja()
Devuelve 6
x=1
zumo_naranja()
Devuelve 2

Normalmente,steeselcomportamientodeseado(aunqueelejemploesunpocorebuscado,puesesraroaccederalas
variablesdeestemodo).Sinembargo,avecespuedesertiltenerunespaciodenombresesttico,esdecir,guardaralgn
[Link].

x=4
def zumo_manzana(x=x):
return x*2

Aqu,alargumentoxseleasignaunvalorpordefectoquecoincideconelvalordelavariablexenelinstanteenquela
[Link],siemprequenadieproporcioneunargumentoparalafuncin,funcionaras:

x=3
zumo_manzana():
Devuelve 8
x=1
zumo_manzana():
Devuelve 8

Concluyendo:[Link],podramoslimitarnosaescribir

def zumo_tomate():
x=4
return x*2

incluso

def zumo_zanahoria():
return 8

Sinembargo,[Link]
tieneesto?Tomemosunejemplo:Unafuncincompuesta.

Queremosunafuncinquefuncioneas:

from math import sin, cos


sincos = componer(sin,cos)
x = sincos(3)

Dondecomponereslafuncinquequeremosrealizaryxtieneelvalor-0.836021861538,queeslomismoque
sin(cos(3)).Ycmolohacemos?

Observaqueestamosutilizandofuncionescomoargumentosyesoyaesuntrucoensmismo.

Obviamente,[Link]
esqueletodelasolucinpodraser:

def componer(fun1, fun2):


def interior(x):
# ...
return interior

Nostentaraponerreturn fun1(fun2(x))[Link],[Link]
[Link]:

from math import sin, cos


def fun1(x):
return x + " mundo"
def fun2(x):
return "Hola,"
sincos = componer(sin,cos) # Versin incorrecta
x = sincos(3)

Ybien,quvalortendrax?Correcto:"Hola, mundo".Yporqu?Porquecuandoselallama,tomalosvaloresdefun1
yfun2delentorno,[Link],slohayqueutilizarla
tcnicadescritaanteriormente:

def componer(fun1, fun2):


def interior(x, fun1=fun1, fun2=fun2):
return fun1(fun2(x))
return interior

Ahoraslonosquedaesperarquenadieproporcionealafuncinresultantemsdeunargumento,yaqueesonosrompera
losesquemas:).Y,apropsito,comononecesitamoselnombreinterioryslocontieneunaexpresin,podemos
utilizarunafuncinannima,utilizandolapalabraclavelambda:

def componer(f1, f2):


return lambda x, f1=f1, f2=f2: f1(f2(x))

Espartano,[Link]:)
...ysinohaentendidonada,[Link]"unlenguajillopara
scripts"...:)

[Link]...
[Link],quesonenrealidadficherosde
[Link],parautilizarel
mtodosplit(trocear)delmduloestndarstring(cadena),puedehacerestasdoscosas:

import string
x = [Link](y)

o...

from string import split


x = split(y)

Paraobtenermsinformacinsobrelabibliotecademdulosestndar,[Link]/doc/[Link]
unmontndecosastiles.

Todoelcdigodelmdulo/[Link]
comounscriptejecutable,puedeaadiralgoasalfinal:

if __nombre__ == "__main__": ejecutar()

Esunmodomgicodedecirquesielmduloseejecutacomounscriptejecutable(esdecir,quenoestasiendoimportado
porotroscriptomdulo),[Link],puedehacercualquiercosatraslosdos
puntos...:)

Y,sideseahacerunscriptejecutableenUN*X,escribaestocomoprimeralneaparahacerqueelscriptseejecutesin
llamarapythonexplcitamente:

#!/usr/bin/env python

Finalmente,unabrevemencinaunconceptoimportante:[Link](comodividirporceroo
leerdeunarchivoinexistente)[Link]
lanzarlasenlosmomentosadecuados.

Sinosehacenadaconlaexcepcin,[Link]
construccintry/[Link]:

def dividirSeguro(a,b):
try:
return a/b
except ZeroDivisionError:
return None

[Link],sepodrahabermiradosiberacero,perohaymuchos
[Link],sinotuviramoslaclusulatryindividirSeguro,hacindoladeestemodouna
funcinarriesgada,podramoshaceralgocomo:

try:
dividirInseguro(a,b)
except ZeroDivisionError:
print "Se ha intentado dividir por cero en dividirInseguro"

Encasosenlosquenormalmentenodeberahaberproblemasconcretos,peropodranocurrir,lautilizacinde
excepcionespermiteevitartediosascomprobaciones.

Bueno,[Link],[Link]:"Quelas
fuentesteacompaen"(lase:Leertodoelcdigoalqueselepuedaecharlasmanosencima).:))Paraarrancar,aquhay
[Link],[Link].
[Link]
[Link],
[Link]?Porque,cuandoelprimerbucle
internofinalizaconunbreak,queelsiguientebucledebarearrancardependedesielbucleprincipalhafinalizado,estoes,si
donesehapuestoa1:

while not done:


while not done:
# Se repite hasta un 'break'
while not done:
# Slo se ejecuta si el primero no puso "done" a 1

Unaversinequivalente,posiblementemsclara,peroenmiopininmenoselegante,sera:

while not done:


while 1:
# Se repite hasta un 'break'
if not done:
while 1:
# Slo se ejecuta si el primero no puso "done" a 1

Lanicaraznporlaqueheutilizadolavariabledoneenelprimerbuclehasidoquemegustabaconservarlasimetraentre
[Link],sepodrainvertirelordenyelalgoritmotodavafuncionara.

SepuedenencontrarmsejemplosenlapginatidbitdeJoeStrout.

[PginaprincipaldePython]

CopyrightMagnusLieHetland(mlh@[Link])
TraduccindeMarcosSnchezProvencio
CorreccindeSoniaRubioHernando

También podría gustarte