Apuntes de Python

Embed Size (px)

Citation preview

  • 7/26/2019 Apuntes de Python

    1/49

    Actualizaciones de pytho 2.X a 3.X !=long int987L 987raw_input input

    exec open (fle) exec(open(flename).read())print x, print(x, )

    Lo que puedes hacer con python

    t"on e# com$nmente aplicado en m%# dominio# &ue pueda cu'rir a&u. oreemplo,

    encontrar% "erramienta# &ue le permiten utili*ar t"on para "acer+ programaci-n de uego# multimedia con pgame, cgit, glet, /o,

    anda01, otro#

    comunicaci-n del puerto #erie en 2indow#, Linux, m%# con la exten#i-n/erial 3l proce#amiento de im%gene# con 4L #u m%# reciente tenedor 5lmo"ada,6penL, lender, aa, m%# programaci-n de control del ro'ot con el it de "erramienta# ro an%li#i# del lenguae natural con el pa&uete :L; 4n#trumentaci-n en lo# ta'lone# de ram'ue#a i 5rduino La inorm%tica m-?il con puerto# de t"on para el oogle 5ndroid 5pple i6/

    plataorma# unci-n de "oa de c%lculo de 3xcel la programaci-n de macro# con el @LL o

    1ata:itrocomplemento#

    Aontenido de arc"i?o de lo# medio# de comunicaci-n proce#amiento deeti&ueta de metadato# con edia, 410, 4L B 5lmo"ada, m%# La inteligencia artifcial con la 'i'lioteca de red neuronal rain la m%&uina de

    lec"eit de "erramienta# de aprendi*ae programaci-n del #i#tema experto con AL4/, e, rolog, p1atalog /uper?i#i-n de la red con *eno##, e#crito en t"on per#onali*ada con 3l di#eCo de t"onDgui-n el modelado con t"onA51, t"on6AA, reeA51,

    otro# 3la'oraci-n de documento# la generaci-n con EeportLa', /p"inx, guepardo,

    1, a# La ?i#uali*aci-n de dato# con aa?i, matplotli', F;, Ft"on m%# an%li#i# @L con el pa&uete @L 'i'lioteca, el m-dulo xmlrpcli', el tercero

    exten#ione# G/6: proce#amiento de arc"i?o# A/F con lo# m-dulo# de G/6: c#?

    Palabras reservadas en python

    False None True and as assert break class continue def del elif elseexcept nally for from global if import in is lambda nonlocal not or passraise return try while with yield

    from eword importi#eword, wli#tprint(wli#t) Himprime toda# la# pala'ra# cla?e#print(i#eword(Ii#I)) He?alua #i una pala'ra e# re#er?ada

  • 7/26/2019 Apuntes de Python

    2/49

    as/u unci-n e# dual. uede utili*ar#e al momento de importar un determinadoo'eto de un m-dulo, para a#ignar un nom're dierente

    fromeword importwli#t aseword_li#t, i#eword

    5dem%#, #e utili*a la #iguiente #intaxi# para a#ignar inormaci-n de una excepci-na un determinado o'eto.try+

    #in_defnirexcept:ame3rror ase+

    print(e)

    execermite eecutar c-digo t"on a partir de una cadena o arc"i?o.exec(Ia=JKnprint(I"ow old are ouMI)I)print(a)

    6tro eemplo #eria eecutar un arc"i?o de pt"on.exec(open(Narchivo_python.pN).read())

    globalermite modifcar el ?alor de un o'eto glo'al de#de un %m'ito con menor alcance(una unci-n, por eemplo).a= Kdefimpre#o()+

    global', aa,'=OP,OPP

    impre#o()print(a,')

    6tro eemplo con glo'alde te#ter(#tart)+

    glo'al #tate H o?e it out to t"e module to c"ange it#tate = #tart H glo'al allow# c"ange# in module #copede ne#ted(la'el)+

    glo'al #tate

    print(la'el, #tate)#tate Q= Oreturn ne#ted

    =te#ter(P)(I#pamI) H#pam P

    in1etermina la exi#tencia de un determinado ?alor dentro de una li#ta, tupla,diccionario o cual&uier o'eto itera'le.J in(O, J, 0) H;rue

    is

  • 7/26/2019 Apuntes de Python

    3/49

    1etermina #i do# o'eto# #on iguale#, a dierencia de lo# #igno# de e&ui?alencia(==), &ue determinan #i am'o# tienen el mi#mo ?alor.

    o'eto5 i# o'eto Hal#e or ;rue

    /iempre de'e #er u#ado al comparer con one

    nonlocalermite modifcar el ?alor de un o'eto &ue "a #ido creado en un %m'ito anterior.

    defa()+i = Odef'()+

    nonlocalii = J

    b()print(i)

    a()H#alida J

    !ithermite encap#ular la eecuci-n de un 'lo&ue de c-digo, de modo &ue lainiciali*aci-n fnali*aci-n de un o'eto e# reali*ada autom%ticamente por t"on,utili*ando la# uncione# __enter__ __exit__

    !ithopen(Iino.txtI)+ raise"xception

    yield

    /e comporta al igual &ue return, con la dierencia &ue en lugar de retornar un$nico ?alor, retorna elemento# &ue conorman un generador (un o'eto itera'le&ue puede recorrer#e una ?e*, a &ue el contenido no e# almacenado en lamemoria), por lo &ue puede emplear#e m$ltiple# ?ece# en una mi#ma unci-n.

    def()+yieldOyieldJyield0

    g = ()fori ing+

    print(i)

    Algunas librer#as.random.mat".tinter

    $etodo type

  • 7/26/2019 Apuntes de Python

    4/49

    importtypesH tpe# "a# name# or ot"er tpe#de ()+ pa##type() == tpe#.unction;peprint(tpe())

    3xi#ten ?aria# implementacione# di#tinta# de t"on+ At"on, Gt"on, 4ront"on,, etc. At"on e# la m%# utili*ada, la m%# r%pida la m%# madura. Auando lagente "a'la de t"on normalmente #e refere a e#ta implementaci-n. 3n e#teca#o tanto el intRrprete como lo# m-dulo# e#t%n e#crito# en A. Gt"on e# laimplementaci-n en Ga?a de t"on, mientra# &ue 4ront"on e# #u contrapartidaen AH (.:3;)

    print(_variable) + imprimirprint(_?aria'leO, ?aria'leJ, S., ?aria'len) + concatena la# ?aria'le con une#pacio adicional

    input() + lectura de datoH + comentariotype(_variable) + de?uel?e el tipo de datolen(_collection) +de?uel?e la longitud de la collecion, una cadena tam'iRne# una colleccionround(_numero, redondeo) + redondea una expre#i-nrange(_numero) + rango de numero de P a _ numerorange(_num1, _num2, _avance) : a?an*a de#de elnum1 "a#taelnum2del_arraTindex] + &uita un tem por #u ndice, tam'iRn ?aria'le#

    %peradores aritm&ticos'Q D + #uma re#taU +multiplicacion#u'lUU + ele?ado aB +di?i#ionBB +di?i#i-n enteraV +moduloand + operador andor + operador ornot + operador de negacion= + a#ignaci-n== + igualdad!= +dierente

    >< +maor, menor &ue>=

  • 7/26/2019 Apuntes de Python

    5/49

    >>> impue#to = OJ.K B OPP>>> precio = OPP.KP>>> precio U impue#toOJ.KWJK>>> precio Q _OO0.PWJK

    (ariables'#tr + cadena de caractere#int + enteroYoat + Yotante#'ool + ;rue or al#e:one + pala'ra re#er?ed e# como decir nulla'le

    %peradores con cadena')** ' comilla triple (la# do'le# o #inola# #imple#) repre#enta una orma ma#

    rapida de "acer ta'ulacione# #alto# de line#Z[ + comilla normalt + ta'uladore#n + #alto de lnea

    _cadena U \ = cadenacadenacadenacadena_cad Q _cad = cadcad

    len(IgreaterI) H 4# e&ui?alent to IgreaterI.__len__()IgreatI +IerI H 4# e&ui?alent to IgreatI.__add__(IerI)

    IeI inIgreatI H 4# e&ui?alent to IgreatI.__contains__(IeI)

    ;"e ?ariou# strip() met"od# are commonl u#ed w"en reading and cleaning updata or later proce##ing. or example, ou can u#e t"em to get rid o w"ite#pace,remo?e &uotation#, and ot"er ta##

    t = NDDDDD"ello=====Nprint(t.#trip(N=DN))print(t.l#trip(NDN))print(t.r#trip(N=N))

    Aplicando formatoN]+^, ]+.J^, ]+PW.J^N.format(0.O\OK9, 0.O\OK9, 0.O\OK9) HN0.O\OK9P,0.O\, PP0.O\N

    ,unciones con las cadenas.replace +reempla*a una parte de la cadena por otra.#tart#wit" +;rue #i la cadena empie*a con.fnd +u'ica una determinada cadena.#plit +con?ierte cadena en una li#ta.i#digit +?errifca #i la cadena e# numero

    .lower +con?ierte en cadena en minu#cula#.i#decimal +?erifca #i e# decimal

    .i#lanum +?erifca # e# alanumRrico

  • 7/26/2019 Apuntes de Python

    6/49

    .i#lower +?erifca #i e#ta en min$#cula

    .i##pace

    .i#title

    .i#printa'le

    .i#*fll

    .#wapca#e

    3l m-dulo re pro?ee "erramienta# de expre#ione# regulare# para unproce#amiento a?an*ado de cadena#.

    importreprint(re.-ndall(rN'tTaD*XUN, Ntre# elice# tigre# comen trigoN)) HTNtre#N, Ntigre#N,NtrigoNX

    ;"e #tring met"od# splitandjoinextract a li#t o word# rom a #tring and glue ali#t o word# toget"er to orm a #tring, re#pecti?el+

    It"on i# coolI.split() H Eeturn# Tt"on, i#, coolXI I.oin(TIt"onI, Ii#I, IcoolIX) H Eeturn# t"on i# cool

    ,unciones matematicas

    .pow + potencia

    .a'# +?alor a'#oluto

    .round +redondeo

    .'in +'inario

    .#um +#uma

    .min +extrae el minimo

    .max +extrae el maximo

    .actorial +e?alua el actorial

    print(#um(T0, J, \, O, K, PX))

    num# = TO, J, 0, \, KX# = #um(Tx U x or x in num#X)print(#)

    print(an(TN#pamN, NN, NniNX))print(all(TN#pamN, NN, NniNX))

    print(max(T0, J, K, O, \X))print(min(T0, J, K, O, \X))

    from decimalimport /ecimal 'para tra'aar con n$mero# decimale#a = /ecimal(J.OJ)

    importdecimala = decimal.1ecimal(J.0\)

    0andom

    import random a# ran?al = TOOP,OK,O8,O9,J\,KWXprint(ran.c"oice(?al)) H#elecciona un item

  • 7/26/2019 Apuntes de Python

    7/49

    print(ran.#ample(?al,0)) H#eleccion multiple# item#print(ran.randint(KP,OPP)) H#eleccinoa un numero en un inter?aloprint(ran.random()) H#elcciona un numero en punto Yotante deP a Oprint(ran.getrand'it#(JPP)) H#elecciona un nuero de acuerdo al tamaCo

    ,racciones matem1ticas

    fromraction# importractionx = raction(O, 0) H :umerator, denominator = raction(\, W)print(xQ)

    $&todo copyimportcopa= TO,J,0,\X

    '= cop.cop(a)c=cop.deepcop(a)print(a== ')

    ime and /ateime

    fromdatetime importdatetime, timedeltaa = timedelta(da#=J, "our# = W)'= datetime.toda() D datetime(JPOK,OJ,0O)' Q= timedelta(da# = O) H;pe3rror+ Nmont"#N i# an in?alid ewordargument or t"i# unction

    print('.da#)print(a.#econd#)

    Localtimefromtime importlocaltimed = localtime()a = d.tm_ear,d.tm_mon,d.tm_mdaprint(a)

    %L"4%"5

    a = 5rra(OP) __init__(capacit, fllFalue = :one)len(a) __len__()#tr(a) __#tr__()or item in a+ __iter__()aTindexX __getitem__(index)aTindexX = new4tem __#etitem__(index, new4tem)

    Listasli# = TO,0,K,Iro#a#I, Itenemo#I,Ialgo e#pecialI, TIman*anaI, Ipera#IXX

  • 7/26/2019 Apuntes de Python

    8/49

    or a in li#+print(a)

    print(li#T0X) = [ro#a#Zprint(li#TWXTOX) =Zpera#Zli#TPX=;rue +modifcando el element de la li#taNota: los ndices negatios en listas son alidos y funcionan de derechaa i!"uierda#Li#TDOXTOX = [pera#Z

    $ecanismo en listas#print(li#T+0X) + O 0 Kli#TJ+\X = T\,K,WX + modifcando la li#tali#T+X = TX +?aciamo# una li#ta' = aT+X + #acamo# una copia por re'anado de toda la li#ta, e#trop uede #er?ir

    para tra'aar el mi#mo areglo cuando lo e#tamo# recorriendo

    a= TIa'cI, IrgI, IgatoIXforx inaT+X+ iflen(x)> 0+ a.insert(P,x)

    uplas' tuple67La# tupla# uncionan igual &ue la# li#ta#, con la dierencia &ue u#a la# coma# BoparRnte#i# no corc"ete al iniciali*arla#. La# tupla# #on inmuta'le# (no podemo#modifcar #u# ?alore# una ?e* creada)t= J,I"olaI, ;ruet= (J,I"olaI, ;rue)/i #olo #e ?a u#ar un elemento en la tupla "a &ue agregar una coma al fnal delelemento a &ue puede lle?ar a errore#t=(["olaZ) + #trt=Z"olaZ, +tuple

    La# tupla# tam'ien pueden anidar#e

    t = OJ0\K, K\0JO, N"ola!Nu = t, (O, J, 0, \, K) Hanidacion detuplasprint(u)

    onuntos

    `n conunto e# una colecci-n no ordenada #in elemento# repetido#. Lo#conunto# tam'iRn #oportan operacione# matem%tica# como la uni-n, inter#ecci-n,dierencia, dierencia #imRtrica.

    cana#ta = TNman*anaN, NnaranaN, Nman*anaN, NperaN, NnaranaN, N'ananaNXruta = set(cana#ta) H crea un conunto #in repetido#

    H ?eamo# la# operacione# para la# letra# $nica# de do# pala'ra#

    a = set(Na'racada'raN)' = set(Nalaca*amN)

  • 7/26/2019 Apuntes de Python

    9/49

    print(a) H letra# $nica# en a #et(TNaN, NrN, N'N, NcN, NdNX)

    a D ' H letra# en a pero no en ' #et(TNrN, N'N, NdNX)a ' H letra# en a o en ' #et(TNaN, NcN, N'N, NdN, NmN, NlN, NrN, N*NX)a b ' H letra# en a en ' #et(TNaN, NcNX)a ' H letra# en a o ' pero no en am'o# #et(TN'N, NdN, NmN, NlN, NrN, N*NX)

    operadores de set.add.union.intersection.issubset

    LO, LJ = TO, 0, K, J, \X, TJ, K, 0, \, OXprint(LO == LJ) H al#eprint(#et(LO) == #et(LJ)) H;rue

    /iccionarios3l primer ?alor #e trata de la cla?e el #egundo del ?alor a#ociado a la cla?e.Aomo cla?e podemo# utili*ar cual&uier ?alor inmuta'le+ podramo# u#ar n$mero#,cadena#, 'ooleano#, tupla#, pero no li#ta# o diccionario#, dado &ue #on muta'le#./olo podenmo# aceder por #u cla?e. /in em'argo en e#te ca#o no #e puede utili*ar#licing, entre otra# co#a# por&ue lo# diccionario# no #on #ecuencia#, #i nomapping# (mapeado#, a#ociacione#)

    colegio = ]Iau#tinoI+I3dgar i*angoI, I1o# de aoI+IEut" a'aletaI, J+OJ0\,;rue+IlorindaI^print(colegioT[au#tinoZX)

    ecnicas de iteraci8n

    Auando iteramo# #o're diccionario#, #e pueden o'tener al mi#mo tiempo la cla?e #u ?alor corre#pondiente u#ando el mRtodo iteritems().

    ca'allero# = ]Ngalla"adN+ Nel puroN, Nro'inN+ Nel ?alienteN^for, ? in ca'allero#.iteritems()+print6, I+I,?)

    Auando #e itera #o're una #ecuencia, #e puede o'tener el ndice de po#ici-n untoa #u ?alor corre#pondiente u#ando la unci-n enumerate().

    fora, ' in enumerate(range(OP))+print(a,II, ')

    6tro eemploitem = TIaI,I'I, IcIXfori, ? inenumerate(item, K)+ Hinicio del ndice, #olo toma como ?alor

    print(i, ?)

    data = T (O, J), (0, \), (K, W), (7, 8) X

  • 7/26/2019 Apuntes de Python

    10/49

    or n, (x, ) in enumerate(data)+[cuando tenemo# u conunto de arreglo#print(n, x, )

    ara iterar #o're do# o m%# #ecuencia# al mi#mo tiempo, lo# ?alore# puedenemparear#e con la unci-n zip().

    pregunta# = TNnom'reN, No'eti?oN, Ncolor a?oritoN, NedadNXre#pue#ta# = TNlancelotN, Nel #anto grialN, Na*ulNXforp, r in*ip(pregunta#, re#pue#ta#)+ print(NAual e# tu ]P^M ]O^.N.ormat(p, r))

    /i nue#tro arreglo# #on dentado# o no tienen la mi#ma cantidad de regi#tro#u#amo# zip9longest

    fromitertool# import*ip_longe#t

    pregunta# = TNnom'reN, No'eti?oN, Ncolor a?oritoN, NedadNXre#pue#ta# = TNlancelotN, Nel #anto grialN, Na*ulNXforp, r in*ip_longe#t(pregunta#, re#pue#ta#, fll?alue = P)+ Hfll?alue# e#

    opcional pero e# de audaprint(NAual e# tu ]P^M ]O^.N.ormat(p, r))

    ero para poder recorrer una li#ta de#puR# de la otra lo "aramo# con el modulochain. `n u#o com$n de chaine# en lo# programa# en lo# &ue &uiera lle?ar aca'o cierta la# operacione# en todo# lo# elemento# a la ?e* , pero lo# artculo# #eagrupan en dierente# conunto# de tra'ao.

    fromitertool# importc"ainforx inc"ain(pregunta#, re#pue#ta#)+

    print(x)

    /i &ueremo# recorrer un conunto de conunto de tem# dentro de una li#tatendramo# &ue crear un mRtodo para ello.item# = TO, J, T0, \, TK, WX, 7X, 8X

    fromcollection# import4tera'leitem# = TO, J, T0, \, TK, WX, 7X, 8XdefYatten(item#, ignore_tpe# = (#tr, 'te#))+

    forx initem#+ifi#in#tance(x, 4tera'le) andnoti#in#tance(x, ignore_tpe#)+yieldfrom Yatten(x)

    else+yieldx

    forx inYatten(item#)+print(x)

    ero &ue e# yield frome# un 'uen atao e#to #e de#cri'e de la #iguiente orma.yieldfrom Yatten(x)e# &ui?alente a e#te otro

    fori inYatten(x)+yieldi

  • 7/26/2019 Apuntes de Python

    11/49

    /i tenemo# do# li#ta# ordenada# &ueremo# u#ionarla# &ue eel re#utlado meo'tenga otra li#ta ordenada, u#amo# hepqimport"eap&a = T0, \, 7, OPX' = TJ, K, W, OOXforc in"eap&.merge(a, ')+

    print(c)

    ara iterar #o're una #ecuencia en orden in?er#o, #e e#pecifca primero la#ecuencia al derec"o luego #e llama a la unci-n reversed().

    fori inreversed(xrange(O,OP,J))+ printi

    ara iterar #o're una #ecuencia ordenada, #e utili*a la unci-n #orted() la cualde?uel?e una nue?a li#ta ordenada deando a la original intacta.

    cana#ta = TNman*anaN, NnaranaN, Nman*anaN, NperaN, NnaranaN, N'ananaNXfor insorted(#et(cana#ta))+ print

    3l metodo *ip para agrupar

    name# = TNnameN, NageN, NpaN, No'NX?alue# = TN/ue Gone#N, \K, \PPPP, N"dwNXprint(li#t(zip(name#, ?alue#)))print(dict(zip(name#, ?alue#)))

    $etodo pro-ler

    :rid;"e arra# #tudied #o ar can repre#ent onl #imple #e&uence# o item# and arecalled onedimen#ional arra#. or man application#, twoDdimen#ional arra# orgrid# are more u#eul. 5 ta'le o num'er#, or in#tance, can 'e implemented a# atwoDdimen#ional arra.

    %0%L /" ,L;

  • 7/26/2019 Apuntes de Python

    12/49

    Hoperacionelse+

    #operacion

    Var = _valor1 if _condicion else _valor2

    `na #ecuencia i ... eli ... eli ... #u#titue la# #entencia# #witc" o ca#e encontrada#en otro# lenguae#.

    4 a == (' or c and d)+pa##

    5entencias passLa #entencia pa## no "ace nada. 3# utili*ada para rellenar e#pacio# re&uerido# port"on para e?itar errore# de #intaxi#. or eemplo+

    !hilerue+

    pa## H3#pera ocupada "a#ta una interrupci-n de teclado (AtrlQA)

    /e u#a normalmente para crear cla#e# en #u mnima expre#i-n+class3mptAla##+ pass

    6tro lugar donde #e puede u#ar pa## e# como una marca de lugar para unaunci-n o un cuerpo condicional cuando e#t%# tra'aando en c-digo nue?o, lo cualte permite pen#ar a un ni?el de a'#tracci-n maor. 3l pa## #e ignora#ilencio#amente+

    definitlog(Uarg#)+ passH5cordate de implementar e#to!

    =ucless

    !hile_condicion:#operacion

    else'Hoperacion

    for_elem in#ecuencia+Hoperacion

    else'#operacion

    3# ?alido el #iguiente eemploprod> ?for itemin @? 2 3 BC' prod U= itemprint6prod7

    continue 'continuidad del ciclo

    breaD +rompe el ciclo

  • 7/26/2019 Apuntes de Python

    13/49

    4terando una lista a trav&s de sus indicesa = TNarN, NteniaN, NunN, NcorderitoNXfori inrange(len(a))+print(i, aTiX)

    3n la maora de lo# ca#o#, #in em'argo, con?iene u#ar la unci-n enumerate(),

    %sto es un poco complicado de entender las dos imprimen igualL = TO, J, 0, \Xw"ile L+ront, L = LTPX, LTO+Xprint(ront, L)

    L = TO, J, 0, \Xw"ile L+ront, UL = Lprint(ront, L)

    $as sobre condiciones

    La# condicione# u#ada# en la# in#truccione# w"ile e i pueden contener cual&uieroperador, no #-lo comparacione#. Lo# operadore# de comparaci-n in not in?erifcan #i un ?alor e#t% (o no e#t%) en una #ecuencia. Lo# operadore# i# e i# notcomparan #i do# o'eto# #on realmente el mi#mo o'eto e#to e# #ignifcati?o #-lopara o'eto# muta'le# como la# li#ta#.

    ;odo# lo# operadore# de comparaci-n tienen la mi#ma prioridad, la cual e# menor&ue la de todo# lo# operadore# numRrico#.

    La# comparacione# pueden encadenar#e. or eemplo, a E b >> c ?erifca #i a e#menor &ue ' adem%# #i ' e# igual a c.

    La# comparacione# pueden com'inar#e mediante lo# operadore# 'ooleano# and or, el re#ultado de una comparaci-n (o de cual&uier otra expre#i-n 'ooleana)puede negar#e con not. 3#to# tienen prioridade# menore# &ue lo# operadore# decomparaci-n entre ello# not tiene la maor prioridad or la menor, o #ea &ue 5and not or A e&ui?ale a (5 and (not )) or A. Aomo #iempre, lo# parRnte#i#pueden u#ar#e para expre#ar la compo#ici-n de#eada.

    "%/" A/ /"%/"=A5"FB

    import'a#eW\# = 'N"elloNa = 'a#eW\.'W\encode(#)print(a)c = 'a#eW\.'W\decode(a)print(c)

    ,;4%"5

  • 7/26/2019 Apuntes de Python

    14/49

    3n t"on no exi#ten lo# procedimiento#, a &ue cuando el programador noe#pecifca un ?alor de retorno la unci-n de?uel?e el ?alor :one (nada),e&ui?alente al null de Ga?a.

    def _uncion(param1, param2,!!param_n):#operacion

    def _uncion(param1 = valor1, param2,!!param_n):#operacion

    return : retorna un valor

    ara defnir uncione# con un n$mero ?aria'le de argumento# colocamo# un $ltimopar%metro para la unci-n cuo nom're de'e preceder#e de un #igno G+

    defmi_uncionJ(Uotro)+Hoperacion

    ;am'iRn #e puede preceder el nom're del $ltimo par%metro con UU, en cuo ca#oen lugar de una tupla #e utili*ara un diccionario. La# cla?e# de e#te diccionario#eran lo# nom're# de lo# par%metro# indicado# al llamar a la unci-n lo# ?alore#del diccionario, lo# ?alore# a#ociado# a e#to# par%metro#. 3n el #iguiente eemplo#e utili*a la unci-n item# de lo# diccionario#, &ue de?uel?e una li#ta con #u#elemento#, para imprimir lo# par%metro# &ue contiene el diccionario.

    def_uncion(paramO, paramJ, UUotro#)+or i in otro#.item#()+

    print(i)

    3n re#umen+ lo# ?alore# muta'le# #e comportan como pa#o por reerencia, lo#inmuta'le# como pa#o por ?alor.

    ;am'iRn podramo# pa#ar ?ario# ?alore# &ue retornar a return.def (x, )+

    returnx U J, U Ja, ' = (O, J)/in em'argo e#to no &uiere decir &ue la# uncione# t"on puedan de?ol?er ?ario#?alore#, lo &ue ocurre en realidad e# &ue t"on crea una tupla al ?uelo cuo#elemento# #on lo# ?alore# a retornar, e#ta $nica ?aria'le e# la &ue #e de?uel?e.

    ,unciones recursivas

    defdi#plaEange(lower, upper)+III6utput# t"e num'er# rom lower to upper.IIIi lower

  • 7/26/2019 Apuntes de Python

    15/49

    3l ?alor por omi#i-n e# e?aluado #olo una ?e*. 3xi#te una dierencia cuando el?alor por omi#i-n e# un o'eto muta'le como una li#ta, diccionario, o in#tancia dela maora de la# cla#e#. or eemplo, la #iguiente unci-n acumula lo# argumento#&ue #e le pa#an en #u'#iguiente# llamada#+

    def(a, L=TX)+L.append(a)returnLprint(O) H TOXprint(J) H TO,JXprint(0) H TO,J,0X

    /i no #e &uiere &ue el ?alor por omi#i-n #ea compartido entre #u'#iguiente#llamada#, #e pueden e#cri'ir la unci-n a#+

    de (a, L=:one)+

    i L i# :one+ L = TX L.append(a) return L

    print(O) H TOXprint(J) H TJXprint(0) H T0X

    Palabras claves como argumento

    3n general, una li#ta de argumento# de'e tener todo# #u# argumento#po#icionale# #eguido# por lo# argumento# nom'rado#, d-nde la# pala'ra# cla?e#de'en #er elegida# entre lo# nom're# de lo# par%metro# ormale#. :o e#importante #i un par%metro ormal tiene un ?alor por omi#i-n o no. :ing$nargumento puede reci'ir un ?alor m%# de una ?e* (lo# nom're# de par%metro#ormale# corre#pondiente# a argumento# po#icionale# no pueden #er u#ado# comopala'ra# cla?e en la mi#ma llamada).

    de loro(ten#ion=K.P, NmuertoN) Hargumento nom'rado #eguido d uno po#icional,e#to no ?a uncionar

    1el mi#mo modo, lo# diccionario# pueden entregar argumento# nom'rado# con eloperador UU++

    de loro(ten#ion, e#tado=Nro#ti*adoN, accion=NexplotarN)+print(IDD 3#te loro no ?a aI, acci-n)print( I#i le aplica#I, ten#ion, I?oltio#.I)print( I3#taI, e#tado, I!I)

    d = ]Iten#ionI+ Icuatro millone#I, Ie#tadoI+ IdemacradoI, IaccionI+ IF6L5EI^loro(UUd)

    La documentaci8n

  • 7/26/2019 Apuntes de Python

    16/49

    defmi_uncion()+ III:o "ace ma# &ue documentar la uncion.:o, de ?erdad. :o "ace nada.

    III passprint6mi_uncion.__doc__)

    4ntermezzo' "stilo de codi-caci8n

    acer &ue tu c-digo #ea m%# %cil de leer por otro# e# #iempre una 'uena idea, adoptar un 'uen e#tilo de codifcaci-n auda tremendamente a lograrlo.

    ;odo# lo# de#arrolladore# t"on de'en leerlo en alg$n momento a&u e#t%nextrado# lo# punto# m%# importante#+`#ar #angra# de \ e#pacio#, no ta'#.Eecortar la# lnea# para &ue no #uperen lo# 79 caractere#

    `#ar lnea# en 'lanco para #eparar uncione# cla#e#, 'lo&ue# grande# dec-digo dentro de uncione#Auando #ea po#i'le, poner comentario# en una #ola lnea.`#ar doc#tring#.`#ar e#pacio# alrededor de operadore# luego de la# coma#, pero nodirectamente dentro de parRnte#i#+ a = (O, J) Q g(0, \).:om'rar la# cla#e# uncione# con#i#tentemente la con?enci-n e# u#ar:otacionAamello para cla#e# minu#cula#_con_guione#_'ao# para uncione# mRtodo#. /iempre u#% #el como el nom're para el primer argumento en lo#mRtodo# (mir% tutDfr#tcla##e# para m%# inormaci-n #o're cla#e# mRtodo#).

    La instrucci8n 6del7

    a una manera de &uitar un tem de una li#ta dado #u ndice en lugar de #u ?alor+la in#trucci-n del. 3#ta e# dierente del mRtodo pop(), el cual de?uel?e un ?alor. Lain#trucci-n del tam'iRn puede u#ar#e para &uitar #eccione# de una li#ta o ?aciar lali#ta completa (lo &ue "acamo# ante# a#ignando una li#ta ?aca a la #ecci-n).

    ;am'iRn para eliminar ?aria'le#+

    ar = range(OP)printardelarTPX H#e elimina el item de la li#ta

    delaTJ+\XdelaT+Xprintar?ar = I"olaIdel?arprint?ar Hgenera error por&ue la ?aria'le no e#ta defnido

    LA5"5

  • 7/26/2019 Apuntes de Python

    17/49

    3n t"on la# cla#e# #e defnen mediante la pala'ra cla?e class#eguida delnom're de la cla#e, do# punto# (+) a continuaci-n, indentado, el cuerpo de lacla#e.

    classAoc"e+def__init__(#el, ga#olina)+

    #el.ga#olina = ga#olinaprint(I;enemo#I, ga#olina,Ilitro#I)

    defarrancar(#el)+if#el.ga#olina > P+

    print(I5rrancaI)else+

    print(I:o arrancaI)defconducir(#el)+

    if#el.ga#olina > P+#el.ga#olina D= Oprint(IuedanI, #el.ga#olina, Ilitro#I)

    else+ print(I:o #e mue?eI)

    #el + la in#tancia de la mi#ma cla#e,in#tance+ in#tancia de otra# cla#e#

    Lo primero &ue llama la atenci-n en el eemplo anterior e# el nom're tan curio#o&ue tiene el mRtodo __init__. 3#te nom're e# una con?enci-n no un capric"o. 3lmRtodo __init__, con una do'le 'arra 'aa al principio fnal del nom're, #eeecuta u#to de#puR# de crear un nue?o o'eto a partir de la cla#e, proce#o &ue #econoce con el nom're de in#tanciaci-n. 3l mRtodo __init__ #ir?e, como #ugiere #unom're, para reali*ar cual&uier proce#o de iniciali*aci-n &ue #ea nece#ario.

    Aomo ?emo# el primer par%metro de __init__ del re#to de mRtodo# t"on paratodo# \\ de la cla#e e# #iempre #el. 3#ta e# una idea in#pirada en odulaD0 #ir?epara reerir#e al o'eto actual. 3#te mecani#mo e# nece#ario para poder acceder alo# atri'uto# mRtodo# del o'eto dierenciando, por eemplo, una ?aria'le localmi_?ar de un atri'uto del o'eto #el. mi_?ar.

    micoc"e= oche(OP)

    6# preguntarei# entonce# c-mo e# po#i'le &ue a la "ora de crear nue#tro primero'eto pa#emo# un #olo par%metro a __init__, el n$mero 0, cuando la defnici-n de

    la unci-n indica claramente &ue preci#a de do# par%metro# (#el ga#olina). 3#toe# a# por&ue t"on pa#a el primer argumento (la reerencia al o'eto &ue #ecrea) autom%ticamente

    Aomo $ltimo apunte recordar &ue en t"on, como a #e coment- en repetida#oca#ione# anteriormente, todo #on o'eto#. La# cadena#, por eemplo, tienenmRtodo# como upper(), &ue de?uel?e el texto en ma$#cula# o count(#u'), &uede?uel?e el n$mero de ?ece# &ue #e encontr- la cadena #u' en el texto.

    0eferencias de obetos

    class3#tudiante(o'ect)+

  • 7/26/2019 Apuntes de Python

    18/49

    de modifcar(self, ?alue)+#el.prop5 = ?alue

    prop5 = :one

    importwearea = 3#tudiante()a.modifcar(JP)are = weare.re(a) Hreerenciada' = a Hreerenciadaprint(a.prop5, are().prop5)

    Herenciaara indicar &ue una cla#e "ereda de otra #e coloca el nom're de la cla#e de la&ue #e "ereda entre parRnte#i# de#puR# del nom're de la cla#e+

    classcla#eia(cla#eadre)+Hcodigo#

    5"ora 'ien, puede ocurrir en alguno# ca#o# &ue nece#itemo# #o'ree#cri'ir unmRtodo de la cla#e padre, pero &ue en e#e mRtodo &ueramo# eecutar el mRtodode la cla#e padre por&ue nue#tro nue?o mRtodo no nece#ite m%# &ue eecutar unpar de nue?a# in#truccione# extra. 3n e#e ca#o u#aramo# la #intaxi#/uperAla#e.metodo(#el, arg#) para llamar al mRtodo de igual nom're de la cla#epadre. or eemplo, para llamar al mRtodo __init__ de 4n#trumento de#de uitarrau#aramo# 4n#trumento.__init__(#el, precio)

    Herencia $ultiple

    3n t"on, a dierencia de otro# lenguae# como Ga?a o AH, #e permite la "erencia

    m$ltiple, e# decir, una cla#e puede "eredar de ?aria# cla#e# a la ?e*.a#ta con enumerar la# cla#e# de la# &ue #e "ereda #epar%ndola# por coma#+

    classAocodrilo(;erre#tre, 5cuatico)+Hcodigo

    3n el ca#o de &ue alguna de la# cla#e# padre tu?ieran mRtodo# con el mi#monom're n$mero de par%metro# la# cla#e# #o'ree#cri'iran la implementaci-n delo# mRtodo# de la# cla#e# m%# a #u derec"a en la defnici-n.

    cla"" erre"tre:de de"pla$ar("el):

    print(%&l animal anda%)cla"" 'cuatico:

    de de"pla$ar("el):print(%&l animal nada%)

    cla"" ocodrilo('cuatico,erre"tre):de come("el):

    print(%comiendo%)c = ocodrilo()c!de"pla$ar()

    Polimor-smo

  • 7/26/2019 Apuntes de Python

    19/49

    t"on, al #er de tipado din%mico, no impone re#triccione# a lo# tipo# &ue #e lepueden pa#ar a una unci-n, por eemplo, m%# all% de &ue el o'eto #e comportecomo #e e#pera+ #i #e ?a a llamar a un mRtodo () del o'eto pa#ado comopar%metro, por eemplo, e?identemente el o'eto tendr% &ue contar con e#emRtodo. or e#e moti?o, a dierencia de lenguae# de tipado e#t%tico como Ga?a oAQQ, el polimorf#mo en t"on no e# de gran importancia.

    "ncapsulacion

    La encap#ulaci-n #e refere a impedir el acce#o a determinado# mRD todo# atri'uto# de lo# o'eto# e#ta'leciendo a# &uR puede utili*ar#e de#de uera de lacla#e. 3n t"on no exi#ten lo# modifcadore# de acce#o, lo &ue #e #uele "acere# &ue el acce#o a una ?aria'le o unci-n ?iene determinado por #u nom're+ #i elnom're comien*a con do# guione# 'ao# ( no termina tam'iRn con do# guione#'ao#) #e trata de una ?aria'le o unci-n pri?ada, en ca#o contrario e# p$'lica. Lo#mRtodo# cuo nom're comien*a termina con do# guione# 'ao# #on mRtodo#

    e#peciale# &ue t"on llama autom%ticamente 'ao cierta# circun#tancia#, como?eremo# al fnal del captulo.

    class3emplo+defpu'lico(self)+

    print(Iu'licoI)def__pri?ado(self)+

    print(Iri?adoI)e = 3emplo()e.pu'lico()e.__pri?ado() Herror por &ue el mRtodo e# pri?ado

    3#te mecani#mo #e 'a#a en &ue lo# nom're# &ue comien*an con un do'le gui-n'ao #e renom'ran para incluir el nom're de la cla#e (caracter#tica &ue #e conocecon el nom're de name mangling). 3#to implica &ue el mRtodo o atri'uto no e#realmente pri?ado, podemo# acceder a Rl mediante una pe&ueCa trampa+

    e._3emplo__pri?ado() Hel mRtodo e# llamado #in pro'lema#

    3n oca#ione# tam'iRn puede #uceder &ue &ueramo# permitir el acce#o a alg$natri'uto de nue#tro o'eto, pero &ue e#te #e produ*ca de orma controlada. arae#to podemo# e#cri'ir mRtodo# cuo $nico cometido #ea e#te, mRtodo# &uenormalmente, por con?enci-n, tienen nom're# como getFaria'le #etFaria'le dea" &ue #e cono*can tam'iRn con el nom're de getter# #etter#.

    cla## ec"a()+de __init__(#el)+

    #el.__dia = Ode get1ia(#el)+

    return #el.__diade #et1ia(#el, dia)+

    i dia > P and dia < 0O+#el.__dia = dia

    el#e+

    print(I3rrorI)mi_ec"a = ec"a()

  • 7/26/2019 Apuntes de Python

    20/49

    mi_ec"a.#et1ia(J0)print(mi_ec"a.get1ia())

    3#to #e podra #implifcar mediante propiedades, &ue a'#traen al u#uario del"ec"o de &ue #e e#t% utili*ando mRtodo# entre 'am'alina# para o'tener modifcar lo# ?alore# del atri'uto+

    cla## ec"a()+de __init__(#el)+

    #el.__dia = Ode get1ia(#el)+

    return #el.__diade #et1ia(#el, dia)+

    i dia > P and dia < 0O+#el.__dia = dia

    el#e+print(I3rrorI)

    dia = propert(get1ia, #et1ia)mi_ec"a = ec"a()mi_ec"a.dia = JKprint(mi_ec"a.dia)

    $etodos "speciales

    ha ?imo# al principio del artculo el u#o del mRtodo __init__. 3xi#ten otro# mRtodo#con #ignifcado# e#peciale#, cuo# nom're# #iempre comien*an terminan condo# guione# 'ao#. 5 continuaci-n #e li#tan alguno# e#pecialmente $tile#.

    __init__(#el, arg#)Rtodo llamado de#puR# de crear el o'eto para reali*ar tarea# de iniciali*aci-n.

    __new__(cl#, arg#)Rtodo exclu#i?o de la# cla#e# de nue?o e#tilo &ue #e eecuta ante# &ue __init__ &ue #e encarga de con#truir de?ol?er el o'eto en #. 3# e&ui?alente a lo#con#tructore# de AQQ o Ga?a. /e trata de un mRtodo e#t%tico, e# decir, &ue exi#tecon independencia de la# in#tancia# de la cla#e+ e# un mRtodo de cla#e, no deo'eto, por lo tanto el primer par%metro no e# #el, #ino la propia cla#e+ cl#.

    __del__(#el)Rtodo llamado cuando el o'eto ?a a #er 'orrado. ;am'iRn llamado de#tructor, #eutili*a para reali*ar tarea# de limpie*a.

    __#tr__(#el)Rtodo llamado para crear una cadena de texto &ue repre#ente a nue#tro o'eto./e utili*a cuando u#amo# print para mo#trar nue#tro o'eto o cuando u#amo# launci-n #tr(o') para crear una cadena a partir de nue#tro o'eto.classrinter+def__#tr__(#el)+ H `#ed or in#tance it#el return I3#te e# mi o'etoIprint(rinter())

    __cmp__(#el, otro)

  • 7/26/2019 Apuntes de Python

    21/49

    Rtodo llamado cuando #e utili*an para compro'ar #i nue#tro o'eto e# menor,maor o igual al o'eto pa#ado como par%metro. 1e'e de?ol?er un n$meronegati?o #i nue#tro o'eto e# menor, cero #i #on iguale#, un n$mero po#iti?o #inue#tro o'eto e# maor. /i e#te mRtodo no e#t% defnido #e intenta comparar elo'eto mediante lo# operadore# o >= #e lan*ar% una excepci-n. /i #eutili*an lo# operadore# == o != para compro'ar #i do# o'eto# #on iguale#, #ecomprue'a #i #on el mi#mo o'eto (#i tienen el mi#mo id).

    __len__(#el)Rtodo llamado para compro'ar la longitud del o'eto. /e utili*a, por eemplo,cuando #e llama a la unci-n len(o') #o're nue#tro o'eto. Aomo e# de #uponer, elmRtodo de'e de?ol?er la longitud del o'eto.

    __add__(#el, ot"er)+ #e acti?a e#te proce#o cuando #e reali*a la operaci-n de la#uma de un o'eto

    __#u'__(#el, ot"er)+ #e acti?a e#te proce#o cuando #e reali*a la operaci-n de la

    re#ta de un o'eto__mul__(#el, ot"er)+__truedi?__(#el, ot"er)+__call__(#el, ot"er)+e# una uncion &ue #olo puede #er llamado de#de un o'etocreado

    classrinter:def__call__(self,a,b): # *"ed or in"tance it"el return%&"to e" una "uma de +- . +1- = +2-%!ormat(a,b,a.b)a=rinter()print(a(2,/))

    para "acer la comparaci-n de maorde __gt__(#el, ot"er)+ return I/e in?oco ete metodo gt IQ#tr(ot"er)

    para "acer la comparacion de menorde __lt__ (#el, ot"er)+ return I6tro on?ocado lt IQ#tr(ot"er)

    para "acer la comparacion de igualdad

    de __e&__ (#el, ot"er)+ return I6tro on?ocado e& IQ#tr(ot"er)

  • 7/26/2019 Apuntes de Python

    22/49

    %xisten bastantes m&s m'todos especiales( "ue permite entre otrascosas utili!ar el mecanismo de slicing sobre nuestro objeto

    $"%/%5 /" %=

  • 7/26/2019 Apuntes de Python

    23/49

    print Ilo &ue &uieda ede la li#taI, #tacprint(#tac.pop()) H unci-n para pilaprint Ilo &ue &uieda ede la li#taI, #tacprint(#tac.pop(P)) H uncion para colaprint Ilo &ue &uieda ede la li#taI, #tac

    ,unciones /e %rden 5uperior

    3l concepto de uncione# de orden #uperior #e refere al u#o de uncione# como #ide un ?alor cual&uiera #e tratara, po#i'ilitando el pa#ar uncione# comopar%metro# de otra# uncione# o de?ol?er uncione# como ?alor de retorno. 3#to e#po#i'le por&ue, como "emo# in#i#tido a en ?aria# oca#ione#, en t"on todo #ono'eto#. h la# uncione# no #on una excepci-n.

    def#aludar(lang)+def#aludar_e#()+

    printIolaI def#aludar_en(nom're = IeaterI)+ printIiI def#aludar_r()+ printI/alutI lang_unc = ]Ie#I+ #aludar_e#, IenI+ #aludar_en, IrI+ #aludar_r^ returnlang_uncTlangX = #aludar(Ie#I)()

    3n la unci-n #aludar #e defnen ?aria# uncione#+ #aludar_e#, #aludar_en #aludar_r a continuaci-n #e crea un diccionario &ue tiene como cla?e# cadena#de texto &ue identifcan a cada lenguae, como ?alore# la# uncione#. 3l ?alor deretorno de la unci-n e# una de e#ta# uncione#. La unci-n a de?ol?er ?ienedeterminada por el ?alor del par%metro lang &ue #e pa#- como argumento de#aludar.

    Aomo el ?alor de retorno de #aludar e# una unci-n, como "emo# ?i#to, e#to &uieredecir &ue e# una ?aria'le &ue contiene una unci-n. odemo# entonce# llamar ala unci-n a la &ue #e refere de la orma en &ue llamaramo# a cual&uier otraunci-n, aCadiendo uno# parRnte#i# , de orma opcional, una #erie de par%metro#

    entre lo# parRnte#i#.

    #aludar(IenI)(IGorge 2a#"ingtonI)

    3n e#te ca#o el primer par de parRnte#i# indica lo# par%metro# de la unci-n#aludar, el #egundo par, lo# de la unci-n de?uelta por #aludar.

    4teraciones de orden superior sobre listas

    `na de la# co#a# m%# intere#ante# &ue podemo# "acer con nue#tra# uncione# deorden #uperior e# pa#arla# como argumento# de la# uncione# map, flter reduce.

    3#ta# uncione# no# permiten #u#tituir lo# 'ucle# tpico# de lo# lenguae#imperati?o# mediante con#truccione# e&ui?alente#.

  • 7/26/2019 Apuntes de Python

    24/49

    map6function sequence@ sequence ...C7La unci-n map aplica una unci-n a cada elemento de una #ecuencia de?uel?euna li#ta con el re#ultado de aplicar la unci-n a cada elemento. /i #e pa#an comopar%metro# n #ecuencia#, la unci-n tendr% &ue aceptar n argumento#.

    defcuadrado(n)+ returnn UU Jl = TO, J, 0XlJ = map(cuadrado, l)print(lJ)

    -lter6function sequence7La uncion flter ?erifca &ue lo# elemento# de una #ecuencia cumplan unadeterminada condici-n, de?ol?iendo una #ecuencia con lo# elemento# &uecumplen e#a condici-n.

    defpare#(n)+ returnn V J.P == Pl = TO, J, 0, \, K, WXlJ = -lter(pare#, l)print(lJ)

    reduce6function sequence@ initialC7La unci-n reduce aplica una unci-n a pare# de elemento# de una #ecuencia "a#tadearla en un #olo ?alor. 5 continuaci-n podemo# ?er un eemplo en el &ue #eutili*a reduce para #umar todo# lo# elemento# de una li#ta.

    def#umar(x, )+

    returnx Q l = TO, J, 0XlJ = reduce(#umar, l)print(lJ)

    ,uncion Lambda

    3l operador lam'da #ir?e para crear uncione# an-nima# en lnea. 5l #er uncione#an-nima#, e# decir, #in nom're, e#ta# no podr%n #er reerenciada# m%# tarde. La#uncione# lam'da #e con#truen mediante el operador lam'da, lo# par%metro# de

    la unci-n #eparado# por coma# (atenci-n, /4: parRnte#i#), do# punto# (+) elc-digo de la unci-n.

    l = TO, J, 0XlJ = -lter(lambdan+ n V J.P == P, l)l0 = reduce(lambdan, m+ n Q m, l)print(lJ)print(l0)

    omprensi8n de listas

  • 7/26/2019 Apuntes de Python

    25/49

    3n t"on 0PPP map, flter reduce perder%n importancia. h aun&ue e#ta#uncione# #e mantendr%n, reduce pa#ar% a ormar parte del m-dulo unctool#, conlo &ue &uedar% uera de la# uncione# di#poni'le# por deecto, map flter #ede#acon#ear%n en a?or de la# li#t compre"en#ion# o compren#i-n de li#ta#.La compren#i-n de li#ta# con#i#te en una con#trucci-n &ue permite crear li#ta# apartir de otra# li#ta#.

    Feamo# un eemplo de c-mo #e podra utili*ar la compren#i-n de li#ta# para ele?aral cuadrado todo# lo# elemento# de una li#ta, como "icimo# en nue#tro eemplo demap.

    l=TJ,K,\,7,8,9,9,W,O,KXlJ = Tn UU J forn inlXprint(lJ)

    3l eemplo &ue utili*amo# para la unci-n flter (con#er?ar #olo lo# n$mero# &ue#on pare#) #e podra expre#ar con compren#i-n de li#ta# a#+

    l=TJ,K,\,7,8,9,9,W,O,KXlJ = Tn forn inl ifn V J.P == PXprint(lJ)

    este es otro eemploTprint(x Q ) or x in Na'cN or in NlmnNX

    #u e&ui?alenciare# = TXor x in Na'cN+or in NlmnN+

    re#.append(x Q )print(re#)

    "ste otrol = TP, O, J, 0Xm = TIaI, I'IXn = T# U ? or # in m or ? in l i ? > PXprint(n)

    3#ta con#trucci-n #era e&ui?alente a una #erie de orDin anidado#+

    l = TP, O, J, 0Xm = TIaI, I'IXn = TXor # in m+ or ? in l+ i ? > P+ n.append(# U ?)print(n)

    La# li#ta# por compren#i-n #on muc"o m%# Yexi'le# &ue map() pueden aplicar#ea expre#ione# complea# uncione# anidada#+a = T#tr(round(0KKBOO0.P, i)) or i in range(O,W)Xprint(a)

  • 7/26/2019 Apuntes de Python

    26/49

    Listas por comprension anidadas

    /on una "erramienta podero#a pero, como toda "erramienta podero#a, de'enu#ar#e con cuidado, o ni #i&uiera u#ar#e

    mat = T TO, J, 0X, T\, K, WX, T7, 8, 9XXprint TTflaTiX or fla in matX or i in TP, O, JXX

    3#te e# otro eemploTprint(x Q Q *)forx inN#pamN i x in N#mNfor inN/5N i in (NN, N5N)for* inNOJ0N i * > NONX

    3n el mundo real, de'era# preerir uncione# predefnida# a declaracione# conYuo compleo. La unci-n *ip() "ara un 'uen tra'ao para e#te ca#o de u#o+

    :eneradores

    La# expre#ione# generadora# uncionan de orma mu #imilar a la compren#i-n deli#ta#. 1e "ec"o #u #intaxi# e# exactamente igual, a excepci-n de &ue #e utili*anparRnte#i# en lugar de corc"ete#+

    l = TJ,O,\,K,WX

    lJ = (n UU J or n in l)li#ta = li#t(lJ) *creando una lista a partir de un generadorprint(lJ)print (li#ta)

    /in em'argo la# expre#ione# generadora# #e dierencian de la compren#i-n deli#ta# en &ue no #e de?uel?e una li#ta, #ino un generador.

  • 7/26/2019 Apuntes de Python

    27/49

    `n decorador no e# e# ma# &ue una unci-n &ue reci'e una unci-n comopar%metro de?uel?e otra unci-n como re#ultado.

    1ecoradore# para atri'uto#

    cla## er#on+de __init__(#el, name)+

    #el._name = namejpropertde name(#el)+ H name = propert(name)

    Iname propert doc#Iprint(Netc"...N)return #el._name

    jname.#etterde name(#el, ?alue)+ H name = name.#etter(name)

    print(Nc"ange...N)#el._name = ?alue

    jname.deleterde name(#el)+ H name = name.deleter(name)print(Nremo?e...N)del #el._name

    'o' = er#on(No' /mit"N) H 'o' "a# a managed attri'uteprint('o'.name) H Eun# name getter (name O)'o'.name = NEo'ert /mit"N H Eun# name #etter (name J)print('o'.name)del 'o'.name

    N+ %,T- $./ 01-2+ 3.,0-2 $-, 4NF+2$-04+N

    AIadiendo metodos a auna clase

    cla## AlientO+de __init__(#el, ?alue)+

    #el.?alue = ?aluede #pam(#el)+

    return #el.?alue U Jde egg#unc(o')+

    return o'.?alue U \

    de "amunc(o', ?alue)+return ?alue Q N"amN

    AlientO.egg# = egg#uncAlientO."am = "amuncx= AlientO(OP)print(x.#pam())print(x.egg#())print(x."am(I'acon I))

    $atrices

    = TTO, J, 0X,T\, K, WX,

  • 7/26/2019 Apuntes de Python

    28/49

    T7, 8, 9XX

    : = TTJ, J, JX,T0, 0, 0X,T\, \, \XXTprint(TrowXTOX) or row in (P, O, J)XTprint(rowTOX) or row in X Hu#ing ok#etTprint(TiXTiX) or i in range(len())X Hdiagonal

    Tprint(col Q OP) or row in or col in rowX/u e&ui?alencia #erare# = TXforrow in+ H /tatement e&ui?alent#

    forcol inrow+ H 4ndent part# urt"er rig"tre#.append(col Q OP)

    print(re#)

    6tro eemplo extraendo #u'matrice#Tprint(Tcol Q OP or col in rowX) or row in X Hcon?ierte en #u'matrice#/u e&ui?alenciare# = TXforrow in+

    tmp = TX H LetDne#ting #tart# new li#tforcol inrow+

    tmp.append(col Q OP)re#.append(tmp)

    print(re#)

    5plicando zip67

    Tprint(TcolO U colJ or (colO, colJ) in *ip(rowO, rowJ)X) or (rowO, rowJ) in *ip(, :)X/u e&ui?alenciare# = TXor (rowO, rowJ) in *ip(, :)+

    tmp = TXor (colO, colJ) in *ip(rowO, rowJ)+

    tmp.append(colO U colJ)re#.append(tmp)

    print(re#)

    Permutaciones

    fromitertool# importpermutation#item = TIaI,I'I, IcIXforp inpermutation#(item)+

    print(p)forp inpermutation#(item, J)+

    print(p)forc incom'ination#(item, J)+

    print(c)

  • 7/26/2019 Apuntes de Python

    29/49

    "X"P4%"5

    tryJexceptJelseJ-nallyLa# excepcione# #on errore# detectado# por t"on durante la eecuci-n delprograma.3n t"on #e utili*a una con#trucci-n trDexcept para capturar tratar la#excepcione#.

    try+Hcodio

    except:#codio

    t"on permite utili*ar ?ario# except para un #olo 'lo&ue tr, de orma &uepodamo# dar un tratamiento di#tinto a la excepci-n dependiendo del tipo deexcepci-n de la &ue #e trate.

    try+ num = int(I0aI) printno_exi#teexceptame"rror+ printILa ?aria'le no exi#teI

    except(alue"rror+ printI3l ?alor no e# un numeroI

    5dem%# podemo# "acer &ue un mi#mo except #ir?a para tratar m%# de unaexcepci-n u#ando una tupla para li#tar lo# tipo# de error &ue &ueremo# &ue trateel 'lo&ue+

    try+ num = int(I0aI) printno_exi#teexcept(ame"rror, (alue"rror)+ printI6currio un errorI

    La con#trucci-n trDexcept puede contar adem%# con una clau#ula el#e, &ue defneun ragmento de c-digo a eecutar #-lo #i no #e "a producido ninguna excepci-nen el tr.

    try+num = 00

    except+printIu'o un error!I

    else+printI;odo e#ta 'ienI

  • 7/26/2019 Apuntes de Python

    30/49

    ;am'iRn exi#te una clau#ula fnall &ue #e eecuta #iempre, #e produ*ca o no unaexcepci-n. 3#ta clau#ula #e #uele utili*ar, entre otra# co#a#, para tarea# delimpie*a. /e eecuta #iempre al fnal de la excepci-n.

    try+* = x B exceptKero/ivision"rror+printI1i?i#ion por ceroI-nally+printILimpiandoI

    Levantando excepciones

    La declaraci-n rai#e permite al programador or*ar a &ue ocurra una excepci-ne#pecfca. ;am'iRn e# intere#ante comentar &ue como programadore# podemo#crear lan*ar nue#tra# propia# excepcione#. a#ta crear una cla#e &ue "erede de"xceptiono cual&uiera de #u# "ia# lan*arla con raise.

    classi3rror("xception)+def__init__(#el, ?alor)+ self.?alor = ?alordef__#tr__(#el)+ returnI3rror I Q str(#el.?alor)try+if?alor > JP+ raisei3rror(00)excepti3rror, e+printe

    6tro eemplo+

    try+ raise:ame3rror(NolaN)except:ame3rror+ printuNFol- una excepci-n!N raise

    or $ltimo, a continuaci-n #e li#tan a modo de reerencia la# excepcione#di#poni'le# por deecto, a# como la cla#e de la &ue deri?a cada una de ella# entre

    parRnte#i#.a#e3xception+ Ala#e de la &ue "eredan toda# la# excepcione#.3xception(a#e3xception)+ /uper cla#e de toda# la# excepcione# &ue no #ean de#alida. enerator3xit(3xception)+ /e pide &ue #e #alga de un generador./tandard3rror(3xception)+ Ala#e 'a#e para toda# la# excepcione# &ue no tengan&ue ?er con #alir del intRrprete.5rit"metic3rror(/tandard3rror)+ Ala#e 'a#e para lo# errore# aritmRD tico#.loatingoint3rror(5rit"metic3rror)+ 3rror en una operaci-n de coma Yotante.6?erYow3rror(5rit"metic3rror)+ Ee#ultado dema#iado grande para poderrepre#entar#e. ero1i?i#ion3rror(5rit"metic3rror)+ Lan*ada cuando el #egundoargumento de una operaci-n de di?i#i-n o m-dulo era P.5##ertion3rror(/tandard3rror)+ all- la condici-n de un e#tamento a##ert.5ttri'ute3rror(/tandard3rror)+ :o #e encontr- el atri'uto.

  • 7/26/2019 Apuntes de Python

    31/49

    363rror(/tandard3rror)+ /e intent- leer m%# all% del fnal de fc"ero.3n?ironment3rror(/tandard3rror)+ Ala#e padre de lo# errore# relacionado# con laentradaB#alida. 463rror(3n?ironment3rror)+ 3rror en una operaci-n deentradaB#alida.6/3rror(3n?ironment3rror)+ 3rror en una llamada a #i#tema.2indow#3rror(6/3rror)+ 3rror en una llamada a #i#tema en 2indow#.4mport3rror(/tandard3rror)+ :o #e encuentra el m-dulo o el elemento del m-dulo&ue #e &uera importar.Looup3rror(/tandard3rror)+ Ala#e padre de lo# errore# de acce#o.4ndex3rror(Looup3rror)+ 3l ndice de la #ecuencia e#t% uera del rango po#i'le.e3rror(Looup3rror)+ La cla?e no exi#te.emor3rror(/tandard3rror)+ :o &ueda memoria #ufciente.:ame3rror(/tandard3rror)+ :o #e encontr- ning$n elemento con e#e nom're.`n'oundLocal3rror(:ame3rror)+ 3l nom're no e#t% a#ociado a ninguna ?aria'le.Eeerence3rror(/tandard3rror)+ 3l o'eto no tiene ninguna reerencia uerteapuntando "acia Rl. Euntime3rror(/tandard3rror)+ 3rror en tiempo de eecuci-n noe#pecifcado. :ot4mplemented3rror(Euntime3rror)+ 3#e mRtodo o unci-n no e#t%

    implementado. /ntax3rror(/tandard3rror)+ Ala#e padre para lo# errore##int%ctico#.4ndentation3rror(/ntax3rror)+ 3rror en la indentaci-n del arc"i?o.

    ;a'3rror(4ndentation3rror)+ 3rror de'ido a la me*cla de e#pacio# ta'uladore#./#tem3rror(/tandard3rror)+ 3rror interno del intRrprete.

    ;pe3rror(/tandard3rror)+ ;ipo de argumento no apropiado.Falue3rror(/tandard3rror)+ Falor del argumento no apropiado.`nicode3rror(Falue3rror)+ Ala#e padre para lo# errore# relacionado# con unicode.`nicode1ecode3rror(`nicode3rror)+ 3rror de decodifcaci-n unicode.`nicode3ncode3rror(`nicode3rror)+ 3rror de codifcaci-n unicode.`nicode;ran#late3rror(`nicode3rror)+ 3rror de traducci-n unicode./top4teration(3xception)+ /e utili*a para indicar el fnal del iterador.

    2arning(3xception)+ Ala#e padre para lo# a?i#o#.1eprecation2arning(2arning)+ Ala#e padre para a?i#o# #o're caracter#tica#o'#oleta#. uture2arning(2arning)+ 5?i#o. La #em%ntica de la con#trucci-ncam'iar% en un uturo. 4mport2arning(2arning)+ 5?i#o #o're po#i'le# errore# a la"ora de importar. ending1eprecation2arning(2arning)+ 5?i#o #o'recaracter#tica# &ue #e marcar%n como o'#oleta# en un uturo pr-ximo.Euntime2arning(2arning)+ 5?i#o #o're comportmaiento# dudo#o# en tiempo deeecuci-n./ntax2arning(2arning)+ 5?i#o #o're #intaxi# dudo#a.`nicode2arning(2arning)+ 5?i#o #o're pro'lema# relacionado# con `nicode, #o'retodo con pro'lema# de con?er#i-n.

    `#er2arning(2arning)+ Ala#e padre para a?i#o# creado# por el programador.e'oard4nterrupt(a#e3xception)+ 3l programa uR interrumpido por el u#uario./#tem3xit(a#e3xception)+ etici-n del intRrprete para terminar la eecuci-n

    0"" A0=%L"5or &uR u#ar %r'ole#

  • 7/26/2019 Apuntes de Python

    32/49

    rom lined'#t import Lined/; tree = Lined/;()

    H"AP

    :0APH%5M:0A,%5

    $%/;L%5 N PAO;""5

    $odulos

    ara acilitar el mantenimiento la lectura lo# programa# dema#iado largo#pueden di?idir#e en m-dulo#, agrupando elemento# relacionado#. Lo# m-dulo# #onentidade# &ue permiten una organi*aci-n di?i#i-n l-gica de nue#tro c-digo. Lo#fc"ero# #on #u contrapartida #ica+ cada arc"i?o t"on almacenado en di#coe&ui?ale a un m-dulo.

    5 la "ora de importar un m-dulo t"on recorre todo# lo# directorio# indicado# enla ?aria'le de entorno h;6:5; en 'u#ca de un arc"i?o con el nom'readecuado. 3l ?alor de la ?aria'le h;6:5; #e puede con#ultar de#de t"on

    mediante ##.pat"import####.pat"

    Heemplo del codigodefmi_uncion()+

    print(Iuna uncionI)classiAla#e+

    def__init__(#el)+print(Iuna cla#eI)

    print(Iun moduloI)

    5"ora llamaremo# al modulo &ue "emo# creado con el nom're modulo#.pimportmodulo#

  • 7/26/2019 Apuntes de Python

    33/49

    modulo#.mi_uncion()a = modulo#.iAla#e()

    3n el ca#o de &ue t"on no encontrara ning$n m-dulo con el nom'ree#pecifcado, #e lan*ara una excepci-n de tipo 4mport3rror.

    La clau#ula import tam'iRn permite importar ?ario# m-dulo# en la mi#ma lnea.3#to permite &ue no #o'ree#cri'amo# accidentalmente alg$n otro o'eto &uetu?iera el mi#mo nom're al importar otro m-dulo.

    importo#, ##, timeprint(time.a#ctime()) Hmue#tra la ec"a actualprint(##.platorm) Hmue#tra la plataorma enla&ue #e eecuta el programaprint(o#.getcwd()) Hmue#tra la carpeta actual de tra'ao

    /in em'argo e# po#i'le utili*ar la con#trucci-n romDimport para a"orrarno# eltener &ue indicar el nom're del m-dulo ante# del o'eto &ue no# intere#a. 1e e#ta

    orma #e importa el o'eto o lo# o'eto# &ue indi&uemo# al e#pacio de nom're#actual.fromtime importa#ctimeprint(a#ctime())

    -un"ue se considera una mala pr&ctica, tam'iRn e# po#i'le importar todo# lo#nom're# del m-dulo al e#pacio de nom're# actual u#ando el caracter U+fromtime import U

    or $ltimo e# intere#ante comentar &ue en t"on lo# m-dulo# tam'iRn #ono'eto# de tipo module en concreto. or #upue#to e#to #ignifca &ue pueden teneratri'uto# mRtodo#. `no de #u# atri'uto#, __name__, #e utili*a a menudo para

    incluir c-digo eecuta'le en un m-dulo pero &ue e#te #-lo #e eecute #i #e llama alm-dulo como programa, no al importarlo. ara lograr e#to 'a#ta #a'er &uecuando #e eecuta el m-dulo directamente __name__ tiene como ?alor [__main__Z,mientra# &ue cuando #e importa, el ?alor de __name__ e# el nom're del m-dulo+

    6tro atri'uto intere#ante e# __doc__, &ue, como en el ca#o de uncione# cla#e#,#ir?e a modo de documentaci-n del o'eto (doc#tring o cadena dedocumentaci-n). /u ?alor e# el de la primera lnea del cuerpo del m-dulo, en elca#o de &ue e#ta #ea una cadena de texto en ca#o contrario ?aldr% :one.

    La funci8n dir67

    La unci-n integrada dir() #e u#a para encontrar &uR nom're# defne un m-dulo.1e?uel?e una li#ta ordenada de cadena#+

    importmat"print(dir(mat")) Hmue#tra la# uncione# defnida# en la cla#e mat"print(dir()) Hmue#tra la# uncione# &ue e#t%n defnida# actualmenteprint(dir(#tr)) Hmue#tra la# uncione# defnida# en la cla#e /tring

    dir() no li#ta lo# nom're# de la# uncione# ?aria'le# integrada#. /i &uerR# unali#ta de e#o#, e#t%n defnido# en el m-dulo e#t%ndar __'uiltin__+

    import__'uiltin__

  • 7/26/2019 Apuntes de Python

    34/49

    print(dir(__'uiltin__)) Hmue#tra todo# lo# metodo# ?aria'le#integrado# por deault

    Paquetes/i lo# m-dulo# #ir?en para organi*ar el c-digo, lo# pa&uete# #ir?en para organi*arlo# m-dulo#. Lo# pa&uete# #on tipo# e#peciale# de m-dulo# (am'o# #on de tipomodule) &ue permiten agrupar m-dulo# relacionado#. ientra# lo# m-dulo# #ecorre#ponden a ni?el #ico con lo# arc"i?o#, lo# pa&uete# #e repre#entan mediantedirectorio#.ara "acer &ue t"on trate a un directorio como un pa&uete e# nece#ario crearun arc"i?o __init__.p en dic"a carpeta. 3n e#te arc"i?o #e pueden defnirelemento# &ue pertene*can a dic"o pa&uete, como una con#tante 1E4F3E para elpa&uete ''dd, aun&ue "a'itualmente #e tratar% de un arc"i?o ?aco. ara "acer&ue un cierto m-dulo #e encuentre dentro de un pa&uete, 'a#ta con copiar elarc"i?o &ue defne el m-dulo al directorio del pa&uete.Aomo lo# modulo#, para importar pa&uete# tam'iRn #e utili*a import romDimport el caracter . para #eparar pa&uete#, #u'pa&uete# m-dulo#.

    importpa&.#u'pa&.modulopa&.#u'pa&.modulo.unc()

    5ara encontrar alg6n m7dulo o pa"uete "ue cubra una cierta necesidad(puedes consultar la lista de 5y54 85ython 5ackage 4ndex) enhttp:99pypipythonorg9( "ue cuenta a la hora de escribir estas lneas( conm&s de ;

  • 7/26/2019 Apuntes de Python

    35/49

    Lo# e#pecifcadore# m%# #encillo# e#t%n ormado# por el #m'olo V #eguido de unaletra &ue indica el tipo con el &ue ormatear el ?alor

    3#pecifcador ormatoV# AadenaVd 3nteroVo 6ctalVx exadecimalV Eeal

    /e puede introducir un n$mero entre el V el car%cter &ue indica el tipo al &ueormatear, indicando el n$mero mnimo de caractere# &ue &ueremo# &ue ocupe lacadena. /i el tamaCo de la cadena re#ultante e# menor &ue e#te n$mero, #eaCadir%n e#pacio# a la i*&uierda de la cadena. 3n el ca#o de &ue el n$mero #eanegati?o, ocurrir% exactamente lo mi#mo, #-lo &ue lo# e#pacio# #e aCadir%n a laderec"a de la cadena.

    print(IVOP# mundoI V IolaI) H#alida+ ola mundoprint(IVDOP# mundoI V IolaI) H#alida+ ola mundo

    3n el ca#o de lo# reale# e# po#i'le indicar la preci#i-n a utili*ar precediendo la deun punto #eguido del n$mero de decimale# &ue &ueremo# mo#trar+

    frommat" import piprint(IV.\I V pi) H#alida+ 0.O\OWprint(IV.\#I V I"ola mundoI) H#alida+ "ola

    ,ormateo elegante de la salida

    5c% "a do# manera# de e#cri'ir una ta'la de cuadrado# cu'o#+

    forx in range(O, OO)+ print(repr(x).rust(J), repr(xUx).rust(0), repr(xUxUx).rust(\))

    forx inrange(O,OO)+printN]P+Jd^ ]O+0d^ ]J+\d^N.format(x, xUx, xUxUx)

    ,ru#t(JP) e&ui?ale ormat(text, [>JPZ)

    .lu#t(JP) e&ui?ale ormat(text,ZOP#^ ]+>OP#^N.ormat(NelloN, N2orldN))3#te eemplo mue#tra el mRtodo ru#t() de lo# o'eto# cadena, el cual ordena unacadena a la derec"a en un campo del anc"o dado llen%ndolo con e#pacio# a lai*&uierda. a mRtodo# #imilare# lu#t() center(). 3#to# mRtodo# no e#cri'ennada, #-lo de?uel?en una nue?a cadena. /i la cadena de entrada e# dema#iadolarga, no la truncan, #ino la de?uel?en intacta e#to te romper% la alineaci-n de tu#columna# pero e# normalmente meor &ue la alternati?a, &ue te e#tara mintiendo#o're el ?alor. (/i realmente &uerR# &ue #e recorte, #iempre podR# agregarle unaoperaci-n de re'anado, como en x.lu#t(n)T+nX.)

    a otro mRtodo, z-ll(), el cual rellena una cadena numRrica a la i*&uierda concero#. 3ntiende #igno# po#iti?o# negati?o#+

  • 7/26/2019 Apuntes de Python

    36/49

    print(NOJN.z-ll(K)) HPPPOJprint(ND0.O\N.z-ll(7)) HDPP0.O\

    3l u#o '%#ico del mRtodo #tr.format() e# como e#to+Print6N/omo# lo# ]P^ &uiene# decimo# I]O^!IN.format(Nca'allero#N, N:opN))

    # = N]name^ "a# ]n^ me##age#.Nprint(#.ormat(name=NuidoN, n=07))

    ext!rap# = ILoo into m ee#, loo into m ee#, t"e ee#, t"e ee#, t"e ee#, not around t"e ee#, donNt loo around t"e ee#, loo into m ee#, ouNre under.Iimporttextwrapprint(textwrap.fll(#, 7P))

    `n ' e#pecifcador de ormato opcionale# pueden ir luego del nom're delcampo. 3#to aumenta el control #o're c-mo el ?alor e# ormateado. 3l #iguienteeemplo trunca i a tre# lugare# luego del punto decimal.

    importmathprint(N3l ?alor de 4 e# aproximadamente ]P+.0^.N.format(math.pi))

    a#ando un entero luego del N+N cau#ar% &ue &ue el campo #ea de un mnimon$mero de caractere# de anc"o. 3#to e# $til para "acer ta'la# linda#.

    ta'la = ]N/oerdN+ \OJ7, NGacN+ \P98, N1ca'N+ 7W78^

    or nom're, teleono in ta'la.item#()+ print N]P+OP^ ==> ]O+OPd^N.ormat(nom're, teleono)

    /i tenR# una cadena de ormateo realmente larga &ue no &uerR# #eparar, podra#er 'ueno &ue pueda# "acer reerencia a la# ?aria'le# a #er ormateada# por elnom're en ?e* de la po#ici-n. 3#to puede "acer#e #implemente pa#ando eldiccionario u#ando corc"ete# NTXN para acceder a la# cla?e#

    (ieo formateo de cadenas

    3l operador tam'iRn puede u#ar#e para ormateo de cadena#. 4nterpreta elargumento de la i*&uierda con el e#tilo de ormateo de #print para #er aplicado alargumento de la derec"a, de?uel?e la cadena re#ultante de e#ta operaci-n deormateo.

    Archivos 4%

    Lo# fc"ero# en t"on #on o'eto# de tipo fle creado# mediante la unci-n open(a'rir). 3#ta unci-n toma como par%metro# una cadena con la ruta al fc"ero aa'rir, &ue puede #er relati?a o a'#oluta una cadena opcional indicando el modode acce#o (#i no #e e#pecifca #e accede en modo lectura) , por $ltimo, un enteroopcional para e#pecifcar un tamaCo de 'uker di#tinto del utili*ado por deecto.

  • 7/26/2019 Apuntes de Python

    37/49

    3l modo de acce#o puede #er cual&uier com'inaci-n l-gica de lo# #iguiente#modo#+ r+ read, lectura. 5're el arc"i?o en modo lectura. 3l arc"i?o tiene &ue exi#tirpre?iamente, en ca#o contrario #e lan*ar% una excepci-n de tipo 463rror. w+ write, e#critura. 5're el arc"i?o en modo e#critura. /i el arc"i?o no exi#te #ecrea. /i exi#te, #o'ree#cri'e el contenido. a+ append, aCadir. 5're el arc"i?o en modo e#critura. /e dierencia del modo wen &ue en e#te ca#o no #e #o'ree#cri'e el contenido del arc"i?o, #ino &ue #ecomien*a a e#cri'ir al fnal del arc"i?o. '+ 'inar, 'inario. Q+ permite lectura e#critura #imult%nea#. `+ uni?er#al newline, #alto# de lnea uni?er#ale#. ermite tra'aar con arc"i?o#&ue tengan un ormato para lo# #alto# de lnea &ue no coincide con el de laplataorma actual (en 2indow# #e utili*a el caracter AE L, en `nix L en ac 6/AE).Aom'inaci-n r', w'

    = open([arc"i?o.txtZ, [wZ).read() + lee todo el arc"i?o.read(_tama3o_bu4er) + lee a tra?e# del 'uker.readline() + lee linea por linea.write(_texto) + e#cri'e el arc"i?o.writeline() + e#cri'e.clo#e() +cierra el arc"i?o

    importio# = io./tring46()#.write(Iello 2orldnI)print(#.get?alue())

    6tro eemploforlinea inopen(Imiarc"i?o.txtI)+ printlinea

    3l pro'lema con e#te c-digo e# &ue dea el arc"i?o a'ierto por un periodo detiempo indeterminado luego de &ue termine de eecutar#e. 3#to no e# un pro'lemaen #cript# #imple#, pero puede #er un pro'lema en aplicacione# m%# grande#. Ladeclaraci-n wit" permite &ue o'eto# como arc"i?o# #ean u#ado# de una orma

    &ue a#egure &ue #iempre #e lo# li'era r%pido en orma correcta.

    !ithopen(Imiarc"i?o.txtI) as+ forlinea in+ print6linea)

    3# nece#ario compro'ar #i exi#te o no un arc"i?o o directorio. `#amo# os.path

    importo#a = o#.pat".exi#t#(IE JPOKI) H'u#ca la carpeta en el

    ' = o#.pat".exi#t#(I..BE6E55A46: JPO0I) H..B?a a la carpeta padreprint(a, ')

  • 7/26/2019 Apuntes de Python

    38/49

    :zip y bz2

    Lo# m-dulo# de g*ip '*J "acen &ue #ea %cil tra'aar con e#te tipo de arc"i?o# .5m'o# m-dulo# proporcionan una implementaci-n alternati?a de open () &ue #e

    puede utili*ar para e#te prop-#ito. or eemplo, ara leer lo# arc"i?o# comprimido#en orma de texto , "aga lo #iguiente +

    importg*ip!ithg*ip.open(I#omefle.g*I, NrtN) a# +

    text = .read()

    import'*J!ith'*J.open(N#omefle.'*JN, NrtN) a# +

    text = .read()

  • 7/26/2019 Apuntes de Python

    39/49

    e# llamado de#eriali*ing. 3ntre serializaci8n deserializaci8n, la cadena decaractere# repre#entando el o'eto &ui*%# "aa #ido guardado en un arc"i?o odato#, o en?iado a una m%&uina di#tante por una conexi-n de red.

    import#on

    $over el puntero de lecturaJescrituraa #ituacione# en la# &ue no# puede intere#ar mo?er el puntero delecturaBe#critura a una po#ici-n determinada del arc"i?o. or eemplo #i &ueremo#empe*ar a e#cri'ir en una po#ici-n determinada no al fnal o al principio delarc"i?o. ara e#to #e utili*a el mRtodo #ee &ue toma como par%metro un n$ meropo#iti?o o negati?o a utili*ar como de#pla*amiento. ;am'iRn e# po#i'le utili*ar un#egundo par%metro para indicar de#de d-nde &ueremo# &ue #e "aga elde#pla*amiento+ P indicar% &ue el de#pla*amiento #e refere al principio del fc"ero

    (comportamiento por deecto), O #e refere a la po#ici-n actual, J, al fnal delfc"ero. ara determinar la po#ici-n en la &ue #e encuentra actualmente el puntero#e utili*a el mRtodo tell(), &ue de?uel?e un entero indicando la di#tancia en 'te#de#de el principio del fc"ero.

    "l modulo picDle67

    Auando &uerR# gra'ar tipo# de dato# m%# compleo# como li#ta#, diccionario#, oin#tancia# de cla#e#, la# co#a# #e ponen m%# complicada#.3n lugar de tener a lo# u#uario# con#tantemente e#cri'iendo de'ugueandoc-digo para gra'ar tipo# de dato# complicado#, t"on pro?ee un m-dulo e#t%ndar

    llamado picle. 3#te e# un a#om'ro#o m-dulo &ue puede tomar ca#i cual&uiero'eto t"on (inclu#o alguna# orma# de c-digo t"on!), con?ertirlo a unarepre#entaci-n de cadena e#te proce#o #e llama piclear. Eecon#truir lo# o'eto#de#de la repre#entaci-n en cadena #e llama de#piclear.

    picle.dump(x, )

    ara de#piclear el o'eto, #i e# un o'eto arc"i?o &ue ue a'ierto para lectura+

    x = picle.load()importpiclel#t = TWP, I5 #tring o'ectI, O977X

    fle6' = open(Iitem#.datI, Iw'I)foritem inl#t+

    picDle.dump(item, fle6')fle6'.clo#e()

    "XP0"54%"5 0":;LA0"5

    La# expre#ione# regulare#, tam'iRn llamada# regex o regexp, con#i#ten enpatrone# &ue de#cri'en conunto# de cadena# de caractere#. 5lgo parecido #erae#cri'ir en la lnea de comando# de 2indow# dir U.exe U.exe #era una [expre#i-n

  • 7/26/2019 Apuntes de Python

    40/49

    regularZ &ue de#cri'ira toda# la# cadena# de caractere# &ue empie*an concual&uier co#a #eguida de .exe, e# decir, todo# lo# arc"i?o# exe.

    /i &ui#iRramo# compro'ar #i la cadena e# [pt"onZ, [t"onZ, [ct"onZ o cual&uierotra co#a &ue termine en [t"onZ, podramo# utili*ar el car%cter comodn, el punto.+3n el ca#o de &ue nece#it%ramo# el car%cter . en la expre#i-n regular, o cual&uierotro de lo# caractere# e#peciale#, tendramo# &ue e#caparlo utili*ando la 'arrain?ertida

    importrere.matc"(I.t"onI, It"onI)re.matc"(I....I, Ia'c.I)

    /i nece#it%ramo# una expre#i-n &ue #-lo re#ultara cierta para la# cadena#[pt"onZ, [t"onZ [ct"onZ ninguna otra, podramo# utili*ar el car%cter paraexpre#ar alternati?a e#cri'iendo lo# tre# #u'patrone# completo#+

    ifre.match(Ipt"ont"onct"onI, Ipt"onI)+print(Iencontrado #olamente en el grupoI)

    re.matc"([(pc)t"onZ, [pt"onZ)6tra opci-n con#i#tira en encerrar lo# caractere# p, c entre corc"ete# paraormar una cla#e de caractere#, indicando &ue en e#a po#ici-n puede colocar#ecual&uiera de lo# caractere# de la cla#e. re.matc"([TpcXt"onZ, [pt"onZ)

    h #i &ui#iRramo# compro'ar #i la cadena e# [pt"onPZ, [pt"onOZ, [pt"onJZ, ... ,[pt"on9ZM 3n lugar de tener &ue encerrar lo# OP dgito# dentro de lo# corc"ete#podemo# utili*ar el gui-n, &ue #ir?e para indicar rango#.

    re.match([pt"onTPD9XZ, [pt"onPZ)

    /i &ui#iRramo#, por eemplo, &ue el $ltimo car%cter uera o un dgito o una letra#implemente #e e#cri'iran dentro de lo# corc"ete# todo# lo# criterio#, uno detra#de otro.

    re.match([pt"onTPD9aD*5DXZ, [pt"onpZ)

    Lo# conunto# de caractere# tam'iRn #e pueden negar utili*ando el #m'olo . Laexpre#i-n [pt"onTPD9aD*XZ, por eemplo, indicara &ue no# intere#an la# cadena#

    &ue comiencen por [pt"onZ tengan como $ltimo car%cter algo &ue no #ea niuna letra min$#cula ni un n$mero.

    re.match([pt"onTPD9aD*XZ, [pt"onQZ)

    3l u#o de TPD9X para reerir#e a un dgito no e# mu com$n, a &ue, al #er lacompro'aci-n de &ue un car%cter e# un dgito algo mu utili*ado, exi#te una#ecuencia e#pecial e&ui?alente+ d. 3xi#ten otra# #ecuencia# di#poni'le# &ueli#tamo# a continuaci-n+

    [dZ+ un dgito. 3&ui?ale a TPD9X [1Z+ cual&uier car%cter &ue no #ea un dgito. 3&ui?ale a TPD9X

    [wZ+ cual&uier caracter alanumRrico. 3&ui?ale a TaD*5DPD9_X [2Z+ cual&uier car%cter no alanumRrico. 3&ui?ale a TaD*5PD9_X

  • 7/26/2019 Apuntes de Python

    41/49

    [#Z+ cual&uier car%cter en 'lanco. 3&ui?ale a T tnr?X [/Z+ cual&uier car%cter &ue no #ea un e#pacio en 'lanco. 3&ui?ale a Ttnr?X

    3l car%cter U e# #imilar a Q, pero en e#te ca#o lo &ue #e #it$a a #u i*&uierda puedeencontrar#e cero o ma# ?ece#.3l car%cter M indica opcionalidad, e# decir, lo &ue tenemo# a la i*&uierda puede ono aparecer (puede aparecer P o O ?ece#).inalmente la# lla?e# #ir?en para indicar el n$mero de ?ece# exacto &ue puedeaparecer el car%cter de la i*&uierda, o 'ien un rango de ?ece# &ue puede aparecer.or eemplo ]0^ indicara &ue tiene &ue aparecer exactamente 0 ?ece#, ]0,8^indicara &ue tiene &ue aparecer de 0 a 8 ?ece#, ],8^ de P a 8 ?ece# ]0,^ tre#?ece# o ma# (la# &ue #ean).

    6tro elemento intere#ante en la# expre#ione# regulare#, para terminar, e# lae#pecifcaci-n de la# po#icione# en &ue #e tiene &ue encontrar la cadena, e#a e# lautilidad de , &ue indican, re#pecti?amente, &ue el elemento #o're el &ue

    act$an de'e ir al principio de la cadena o al fnal de e#ta.

    importreline = Na#d d aed, e,a#d, ooNprint(re.#plit(rNT,#X#UN, line))

    ara u'icar ec"a# en cadena de textoimportredatepat = re.compile(rNdQBdQBdQN)text = N;oda i# OOBJ7BJPOJ. Aon #tart# 0BO0BJPO0.N

    print(datepat.fndall(text)) Hextrae la# ec"a#print(re.#u'(rN(dQ)B(dQ)B(dQ)N, rN0DODJN, text)) Hextrae la# ec"a luego la#in?ierte

    ara tran#ormar ec"a# en texto legi'leimportrefromcalendar import mont"_a''rtext = N;oda i# OOBJ7BJPOJ. Aon #tart# 0BO0BJPO0.Ndatepat = re.compile(rN(dQ)B(dQ)B(dQ)N)defc"ange_date(m)+

    mon_name = mont"_a''rTint(m.group(O))X

    return N]^ ]^ ]^N.ormat(m.group(J), mon_name, m.group(0))print(datepat.#u'(c"ange_date, text))

    /i nue#tra cadena de texto tiene #alto# de linea no podremo# ?i#uali*ar tan %cil;"e re.compile() unction accept# a Yag, re.16;5LL, w"ic" i# u#eul "ere. 4t mae#t"e . in a regular expre##ion matc" all c"aracter#, including newline#. or example+

    importrecomment = re.compile(rNBU(.UM)UBN)textO = NBU t"i# i# a comment UBNtextJ = NNNBU t"i# i# a

    multiline comment UB... NNN

  • 7/26/2019 Apuntes de Python

    42/49

    print(comment.fndall(textO)) H#i #e ?i#uali*aprint(comment.fndall(textJ)) Hno "a nada

    comment = re.compile(rNBU((M+.n)UM)UBN)print(comment.fndall(textJ)) Ha"ora #i #e ?i#ulai*a el comentario del textJ

    5%Q"5

    e#tDAa#e, 2or#tDAa#e, and 5?erageDAa#e erormanceinar /earc" o a /orted Li#t

    :;4Atributos de !indo!s 6Dinter7

    .icon'itmap(name_ico) icono de la ?entana

    .geometr([widt x "eigt" Q poo#icion@ Q po#ici-nhZ)

    .title(titulo)

    uadro de dialogorom tinter.me##age'ox import a#ocancel H get canned #td dialogi a#ocancel(NFeri exitN, IEeall &uitMI)+ pa##

    otro# cuadro# de dialogo#fromtinter.fledialog importa#openflename H get #tandard dialog#fromtinter.colorc"oo#er importa#color H t"e li?e in Li'tinterfromtinter.me##age'ox importa#&ue#tion, #"owerrorfromtinter.#impledialog importa#Yoata#e#no and a#ocancel H retornan ;rue or al#ea##a?ea#fle Hpregunta #i ?a guardar un arc"i?o

    ontrolesLabel5 #imple me##age area=utton5 #imple la'eled pu#"D'utton widget,rame5 container or attac"ing and arranging ot"er widget o'ect#oplevel, ; 5 new window managed ' t"e window manager$essage5 multiline la'el 3ntr 5 #imple #ingleDline textDentr feldhecDbutton5 twoD#tate 'utton widget, tpicall u#ed or multipleDc"oice#election#0adiobutton5 twoD#tate 'utton widget, tpicall u#ed or #ingleDc"oice #election#

    5cale5 #lider widget wit" #cala'le po#ition#Photo4mage5n image o'ect u#ed or di#plaing ullDcolor image# on ot"erwidget#

  • 7/26/2019 Apuntes de Python

    43/49

    =itmap4mage5n image o'ect u#ed or di#plaing 'itmap image# on ot"erwidget#$enu5 #et o option# a##ociated wit" a enu'utton or topDle?el window$enubutton5 'utton t"at open# a enu o #electa'le option# and #u'menu#5crollbar5 control or #crolling ot"er widget# (e.g., li#t'ox, can?a#, text)Listbox5 li#t o #election name#ext5 multiline text 'row#eBedit widget, wit" #upport or ont#, and #o onanvas5 grap"ic drawing area, w"ic" #upport# line#, circle#, p"oto#, text, and #oon

    Propiedades semeanteswidt""eig"tx po#icion x po#icion

    'g acgroundg oregroundcommand repre#enta uno de lo# e?ento# importante#

    utton and e##ageutton

    fromtinter importUfromtinter.me##age'ox import sho!infode repl()+

    sho!info(title = Npopu#N, me##age=Ioton pr#ionadoI)window# = ;()window#.iconbitmap(Iicopro.icoI)

    'utton = =utton(window#, text=Ipre#ioneI,widt" = WK, "eig"t = JK,command=repl).place(x=JP, =KP)window#.mainloop()

    ,rames

    grid = rame(window#)feldname# = (NnameN, NageN, No'N, NpaN)entrie# = ]^or (ix, la'el) in enumerate((NeN,) Q feldname#)+

    la' = La'el(grid, text=la'el)

    ent = 3ntr(grid)la'.grid(row=ix, column=P)ent.grid(row=ix, column=O)entrie#Tla'elX = ent

    grid.pac()

    !indo!s.mainloop()!indo!s.ater(tim_expire, "ho5ino, popu", "pam)

    2"en widget# are paced, we can #peci w"ic" #ide o t"eir parent t"e #"ould 'eattac"ed to;6, 6;;6, L3;, or E4;.

    .pac(expand=h3/, fll=6;)

  • 7/26/2019 Apuntes de Python

    44/49

    ara #alir de la ?entana podemo# in?ocar al metodo exit del ##, docle clic un#olo clic accionamo#import##fromtinter importUdef"ello(e?ent)+

    print(Nre## twice to exitN)def&uit(e?ent)+

    print(Nello, 4 mu#t 'e going...N)##.exit()

    win = ;()widget = utton(win, text=Nello e?ent worldN)widget.pac()widget.'ind(NN, "ello) H 'ind let mou#e clic#widget.'ind(N IV#IN V ent.get()) H get text

    ent = 3ntr(5indo5")ent.ocu#() H #a?e a clicent.'ind(NN, (lam'da e?ent+ etc"())) H on enter e

    hecDbutton

  • 7/26/2019 Apuntes de Python

    45/49

    c" = A"ec'utton(root, text=#tr(P), command=onre##)

    0adio =uttons.#elect()

    .de#elect()

    5cales 65lider7

    #cl = /cale(root, rom_=DOPP, to=OPP, ticinter?al=KP, re#olution=O,orient=N"ori*ontalN, lengt" = \PP, #"ow?alue=h3/)

    4mages"oto4mage(fle=namefle)

    anvas

    rom tinter import Uroot = ;()can = Aan?a#(root, widt" = KPP, "eig"t = \PP, 'acground = I'lueI)can.create_line(P,P, JPP, JPP, fll=Iw"iteI, widt"=OJ)can.create_rectangle(P,KP, P, OPP, fll=Iw"iteI, widt"=OWP)can.create_arc(xP, P, xO, O, #tart, extent, .... fll, widt", #tle)can.create_polgon(.... fll, outlineIcolor del 'ordeI)can.create_o?al(.... fll, outlineIcolor del 'ordeI)can.create_text(xP, P, text, ont)

    can.create_'itmap(x, , 'itmap, oreground, 'acground)can.create_image(x,, p"otoI"oto4mageI)can.pac(#ide=;6)can?.confg(#crollregion=(P, P, 0PP, OPPP))root.mainloop()

    ;n eemplo con canvasrom tinter import Utrace = al#ecla## Aan?a#3?ent#1emo+

    de __init__(#el, parent=:one)+can?a# = Aan?a#(widt"=0PP, "eig"t=0PP, 'g=N'eigeN)

    can?a#.pac()can?a#.'ind(NN, #el.on/tart) H cliccan?a#.'ind(NN, #el.onrow) H and dragcan?a#.'ind(N

  • 7/26/2019 Apuntes de Python

    46/49

    can?a# = e?ent.widgeti #el.drawn+ can?a#.delete(#el.drawn)o'ect4d = #el.#"ape(#el.#tart.x, #el.#tart., e?ent.x, e?ent.)i trace+ print(o'ect4d)#el.drawn = o'ect4d

    de onAlear(#el, e?ent)+e?ent.widget.delete(NallN) H u#e tag all

    de ono?e(#el, e?ent)+i #el.drawn+ H mo?e to clic #pot

    i trace+print(#el.drawn)

    can?a# = e?ent.widgetdik@, dikh = (e?ent.x D #el.#tart.x), (e?ent. D #el.#tart.)can?a#.mo?e(#el.drawn, dik@, dikh)#el.#tart = e?ent

    Aan?a#3?ent#1emo()

    mainloop()

    $enu

    rom tinter import Ude "ello()+ print(I"ello!I)root = ;()H create a tople?el menumenu'ar = enu(root)flemenu = enu(menu'ar, tearok=P)

    flemenu.add_command(la'el=I6penI, command="ello)flemenu.add_command(la'el=I/a?eI, command="ello)flemenu.add_#eparator()flemenu.add_command(la'el=I3xitI, command=root.&uit)menu'ar.add_ca#cade(la'el=IileI, menu=flemenu)

    editmenu = enu(menu'ar, tearok=P)editmenu.add_command(la'el=IAutI, command="ello)editmenu.add_command(la'el=IAopI, command="ello)editmenu.add_command(la'el=Ia#teI, command="ello)menu'ar.add_ca#cade(la'el=I3ditI, menu=editmenu)

    "elpmenu = enu(menu'ar, tearok=P)"elpmenu.add_command(la'el=I5'outI, command="ello)menu'ar.add_ca#cade(la'el=IelpI, menu="elpmenu)

    H di#pla t"e menuroot.confg(menu=menu'ar)root.mainloop()

    :ridrom tinter import Unumrow, numcol = K, \row# = TX

  • 7/26/2019 Apuntes de Python

    47/49

    or i in range(numrow)+col# = TXor in range(numcol)+

    ent = 3ntr(relie=E413)ent.grid(row=i, column=, #tic=:/32)ent.in#ert(3:1, NVd.VdN V (i, ))col#.append(ent)

    row#.append(col#)#um# = TXor i in range(numcol)+

    la' = La'el(text=NMN, relie=/`:3:)la'.grid(row=numrow, column=i, #tic=:/32)#um#.append(la')

    de onrint()+or row in row#+

    or col in row+

    print(col.get(), end=N N)print()print()

    de on/um()+tot# = TPX U numcolor i in range(numcol)+

    or in range(numrow)+tot#TiX Q= e?al(row#TXTiX.get()) H #um column

    or i in range(numcol)+#um#TiX.confg(text=#tr(tot#TiX)) H di#pla in `4

    de onAlear()+or row in row#+

    or col in row+col.delete(NPN, 3:1)col.in#ert(3:1, NP.PN)

    or #um in #um#+#um.confg(text=NMN)

    import ##utton(text=N/umN, command=on/um).grid(row=numrowQO, column=P)utton(text=NrintN, command=onrint).grid(row=numrowQO, column=O)utton(text=NAlearN, command=onAlear).grid(row=numrowQO, column=J)utton(text=NuitN, command=##.exit).grid(row=numrowQO, column=0)

    mainloop()

    5crolledext

    import _t"read, &ueue, timedataueue = &ueue.ueue() H infnite #i*ede producer(id)+

    or i in range(K)+time.#leep(P.O)print(NputN)

    dataueue.put(NTproducer id=Vd, count=VdXN V (id, i))de con#umer(root)+

  • 7/26/2019 Apuntes de Python

    48/49

    tr+print(NgetN)data = dataueue.get('loc=al#e)

    except &ueue.3mpt+pa##

    el#e+root.in#ert(NendN, Ncon#umer got => V#nN V #tr(data))root.#ee(NendN)root.ater(JKP, lam'da+ con#umer(root)) H \ time# per #ec

    de maet"read#()+or i in range(\)+

    _t"rea.#tart_new_t"read(producer, (i,))

    H main`4 t"read+ #pawn 'atc" o worer t"read# on eac" mou#e clicrom tinter.#crolledtext import /crolled;extroot =/crolled;ext()root.pac()

    root.'ind(NN, lam'da e?ent+ maet"read#())con#umer(root) H #tart &ueue c"ec loop in main t"readroot.mainloop() H popDup window, enter t e?ent loop

    %pen,ile and 5ave,ile

    rom tinter import Urom tinter.fledialog import a#openflename, a##a?ea#flenamecla## 1emo(rame)+

    de __init__(#el,parent=:one)+rame.__init__(#el,parent)

    #el.pac()La'el(#el, text =Ia#ic demo#I).pac()utton(#el, text=NopenN, command=#el.openfle).pac(fll=6;)utton(#el, text=N#a?eN, command=#el.#a?efle).pac(fll=6;)#el.open_name = #el.#a?e_name = II

    de openfle(#el)+ H #a?e u#er re#ult##el.open_name = a#openflename() H u#e dialog option# "ere

    de #a?efle(#el)+#el.#a?e_name = a##a?ea#flename(initialdir=NA+t"on0ON)

    H di#pla window onceprint(NpopupO...N)mdialog = 1emo() H attac"e# rame to deault ;()mdialog.mainloop() H di#pla return# ater window# clo#edprint(mdialog.open_name) H name# #till on o'ect, t"oug" `4 goneprint(mdialog.#a?e_name)H :on `4 #ection o t"e program u#e# mdialog "ereH di#pla window againprint(NpopupJ...N)mdialog = 1emo() H reDcreate widget# againmdialog.mainloop() H window pop# up againprint(mdialog.open_name) H new ?alue# on t"e o'ect againprint(mdialog.#a?e_name)H :on `4 #ection o t"e program u#e# mdialog again

    print(Nending...N)

  • 7/26/2019 Apuntes de Python

    49/49