Documentos de Académico
Documentos de Profesional
Documentos de Cultura
arkaitzr@gmail.com
pablo@ordunya.com
Cursillos Julio 2006 !"#ost
$ntroducci%n a Pyt#on
This work is licensed under the Creative Commons Attribution License. To view a copy of this license, visit
http://creativecommons.org/licenses/by/.!/ or send a letter to Creative Commons, ""# $athan Abbott %ay, &tanford, California #'(!",
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
Sobre el cursillo
Cursillos de Julio
)Co!partir conoci!iento*
+yudar a dar los pri!eros pasos de una tecnolog#a lengua(e de progra!acin etc,
Introduccin a Python
Progra!acin !odular,
:rientacin a ob(etos
;ases de Datos
<17
=UI
Si!ple y poderoso
De scripting
:pen source
De propsito general
6ipado esttico
O !ucho !s ,,,
Python es ideal-
Para 7inu.-
Un co!ando si!ple-
<<< print "Hola Mundo"
Hola Mundo
<<<
Palabras reservadas-
>a2 strings
<<< print rAOnOOA # no se Aes*apaA On
7istas 6:
Para usar una lista co!o una pila se pueden usar append y pop-
YYY ite!s,append3\\\5
YYY ite!s Q4[ U L \\\R
YYY ite!s,pop35
\\\
YYY ite!s Q4[ U LR
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
6ipos de datos KII
E,(, 3*ondi*ional&py5
> B .
h B 4
if > \ h :
print "primer test pasado"
elif > BB .:
print => tiene valor .]
else:
print "se'undo test pasado"
<<< python *ondi*ional&py
primer test pasado
Por e(e!plo-
reply B ArepiteA
%hile reply BB ArepiteA:
print AHolaA
reply B ra%Kinput(AQntrodu*e "repite" para
ha*erlo de nuevo: A
Hola
Qntrodu*e "repite" para ha*erlo de nuevo: repite
Hola
Qntrodu*e "repite" para ha*erlo de nuevo: adiDs
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
"unciones
Kisuali$ar#a-
ar's: (AaaaA, AbbbA
L%ar's: "Aar'1A: A***A, Aar'!A: AdddA$
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
ar'2: "un primer ar'umento"
ar's: (AaaaA, AbbbA
L%ar's: "Aar'1A: A***A, Aar'!A: AdddA$
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
Clases
Kisuali$ar#a-
^asi* (( name: ManYana
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
^asi* (( name: JaranNa
Spe*ial (( upper name: J0V0JU0& QtAs edible&
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
E.cepciones
Kisuali$ar#a-
Ms': mi mensaNe de error
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
1dulos
E,(, modulo&py-
def one(a:
print "in one"
def t%o (*:
print "in t%o"
Uso de un !dulo-
<<< import modulo
<<< dir(modulo # lista *ontenidos mDdulo
6AKKbuiltinsKKA, AKKdo*KKA, AKKfileKKA, AKKnameKKA,
AoneA, At%oA:
<<< modulo&one(!
in one
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
1dulos II
Kisuali$ar#a-
*lass #1
*lass #!
print (printredire*t&py5
7o cual visuali$ar#a-
(sho%K'lobal nombre: ManYana
(setK'lobal nombre: JaranNa
(sho%K'lobal nombre: JaranNa
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
Seriali$acin de ob(etos
>evisar e(e!plos-
picIlinge.a!ple,py
unpicIlinge.a!ple,py
1yS]7db 3http-00source&orge,net0pro(ects0!ys%l4python5
Etc,
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
http-00222,!ys%l,co!
Diseada para-
http://dev&mys>l&*om/do%nloads/mys>l/4&2&
html
Kisuali$ando lo siguiente-
, python a**esodbeventosMySFM&py
62, A8ursillos de UulioA, ARSQCR(CR9S;TA, 1, A8ursillo -ythonA:
61, ATtro eventoA, ATtro lu'arA, 1, A8urso &&&A:
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
S]7ite
1ultiplata&or!a
http-00222,s%lite,org0
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
E(e!plo progra!acin ;D en
Python con S]7ite I
# db/a**esodbeventosSFMite&py
import s#lite, time, sys
def exe*uteSFM8ommand(*ursor, *ommand:
ro%Set B 6:
*ommand B *ommand&strip(
if len(*ommand:
try:
cursor.execute(command) # RNe*uta el *omando
if *ommand&lo%er(&starts%ith(Asele*tA: # si es sele*t
lines B cursor.fetchall() # re*uperar todos los resultados
for line in lines:
ro% B 6:
for *olumn in line:
ro%&append(*olumn
ro%Set&append(ro%
ex*ept s>lite&-ro'rammin'Rrror, e:
print e
sys&exit(
return ro%Set
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
E(e!plo progra!acin ;D en
Python con S]7ite II
if KKnameKK BB AKKmainKKA:
db=s#lite.connect(db=deusto) $%deusto% ser& el nombre del fichero
cursor = db.cursor()
exe*uteSFM8ommand(*ursor, "update eventos set fe*haB" + str(time&time(Z1222
ro%Set B exe*uteSFM8ommand(*ursor, "sele*t Z from eventos"
for ro% in ro%Set:
print ro%
del *ursor
Kisuali$ando lo siguiente-
, python a**esodbeventosSFMite&py
62, A8ursillos de UulioA, ARSQCR(CR9S;TA, 1, A8ursillo -ythonA:
61, ATtro eventoA, ATtro lu'arA, 1, A8urso &&&A:
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
Python D; +PI I
)Pero si es lo !is!o*
S#-
http-00222,python,org0dev0peps0pep4MTU_0
Kisuali$ando lo siguiente-
, python a**esodbeventosC^Q&py
62, A8ursillos de UulioA, ARSQCR(CR9S;TA, 1, A8ursillo -ythonA:
61, ATtro eventoA, ATtro lu'arA, 1, A8urso &&&A:
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
:tro e(e!plo de D;I 4 I
# db/a**esodbeventosC^Q-arametros&py
#9na de las dos si'uientes:
import s>lite as dbi
#import MySFMdb as dbi
import time, sys
def exe*uteSFM8ommand(*ursor, *ommand:
ro%Set B 6:
*ommand B *ommand&strip(
if len(*ommand:
try:
*ursor&exe*ute(*ommand # RNe*uta el *omando
if *ommand&lo%er(&starts%ith(Asele*tA: # si es sele*t
lines B *ursor&fet*hall( # re*uperar todos los resultados
for line in lines:
ro% B 6:
for *olumn in line:
ro%&append(*olumn
ro%Set&append(ro%
ex*ept dbi&-ro'rammin'Rrror, e:
print e
sys&exit(
return ro%Setm&r
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
:tro e(e!plo de D;I 4 II
if KKnameKK BB AKKmainKKA:
if len(sys.ar(+) ,= -*
print .. sys.stderr! /sa(e* python 0s L12AL34A2315 0 sys.ar(+678
sys.exit(9)
dbBdbi&*onne*t(hostB]lo*alhost],userB]deusto],pass%dB]deusto],dbB"deusto"
*ursor B db&*ursor(
exe*uteSFM8ommand(*ursor, "update eventos set fe*haB" + str(time&time(Z1222
ro"Set = executeSQL2ommand(cursor! select : from );)5<1S "here L12AL34A2315 =
=>sys.ar(+698>=)
for ro% in ro%Set:
print ro%
del *ursor
Kisuali$ando lo siguiente-
, python a**esodbeventosC^Q-arametros&py RSQCR(CR9S;T
62, A8ursillos de UulioA, ARSQCR(CR9S;TA, 1, A8ursillo -ythonA:
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
:tro e(e!plo de D;I 4 III
Pero,,, Py la seguridadS
Si pone!os-
, python a**esodbeventosC^Q-arametros&py "lo>ueseaA or 1 B 1 (("
62, A8ursillos de UulioA, ARSQCR(CR9S;TA, 1, A8ursillo -ythonA:
61, ATtro eventoA, ATtro lu'arA, 1, A8urso &&&A:
>marL
threadin'
1s si!ilar a Java
Instrucciones de procesa!iento
3processing instructions ' PI5
Co!entarios
Ele!entos
>e&erencias a entidades
Secciones CD+6+
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
E(e!plo Docu!ento <17
\Hxml versionB"1&2"H<
\!CT8;W-R mensaNe SWS;RM =lab'roups&dtd"<
\labK'roup<
\studentKname dniB=..3124!/"<
Uosu 0rtaYa
\/studentKname<
\studentKname dniB=..4./!11"<
Juria ^urua'a
\/studentKname<
\studentKname dniB=!/44.4!1" tutorB=//.43!11"<
Qn'a Corsman
\/studentKname<
\/labK'roup<
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
<17 Parsing
Documento
XML
XML DTD
XML Schema
Parser XML
Aplicacin
XML
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
<17 Parsing 3cont5
S+<
D:1
http-00222,2^,org0D:1
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
Si!ple +PI &or <17- S+<
De&ine T !todos-
maLeKparser(6parser_list:
parse(filename_or_stream, handler6,
error_handler:
http-00py.!l,source&orge,net0topics0
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
E(e!plo D:1 I
# xml/eNemploCTM&py
# RNe*utar: python eNemploCTM&py 8artelera&xml
#!/usr/bin/env python
import xml&dom&minidom, sys
*lass -eli*ula:
def KKinitKK(self, *odi'o, titulo, dire*tor, a*tores:
self&*odi'o B *odi'o
self&titulo B titulo
self&dire*tor B dire*tor
self&a*tores B a*tores
def KKreprKK(self:
return "8odi'o: " + str(self&*odi'o + " ( titulo: " +
self&titulo + " ( dire*tor: " + self&dire*tor + " ( a*tores: " +
self&a*tores
*lass -eli*ulaCTM-arser:
def KKinitKK(self, filename:
self&dom B xml&dom&minidom&parse(filename
self&peli*ulas B 6:
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
E(e!plo D:1 II
def 'et-eli*ulas(self:
if not self&peli*ulas:
peli*ulaJodes B self&dom&'etRlements^y;a'Jame("-eli*ula"
num-elis B len(peli*ulaJodes
for i in ran'e(num-elis:
peli*ula B peli*ulaJodes&item(i
# Ve*uperar los attributes de *ada nodo -eli*ula
peli0ttribs B peli*ula&attributes
*odi'o B peli0ttribs&'etJamedQtem("*odi'o"&nodePalue
titulo B peli0ttribs&'etJamedQtem("titulo"&nodePalue
dire*tor B peli0ttribs&'etJamedQtem("dire*tor"&nodePalue
a*tores B peli0ttribs&'etJamedQtem("a*tores"&nodePalue
self&peli*ulas&append(-eli*ula(*odi'o,titulo,dire*tor,a*tores
return self&peli*ulas
if KKnameKK BB AKKmainKKA:
dom-arser B -eli*ulaCTM-arser(sys&ar'v61:
for peli in dom-arser&'et-eli*ulas(:
print peli
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
E.tensible Style 7anguage
6rans&or!ations 3<S765 I
Dos partes-
Kenta(as-
Desventa(as-
3students,ht!l5
\H;MM<
\HR0C< \;Q;MR<Jame of students\/;Q;MR<
\/HR0C<
\^TCW<
\-<9sue 0rtaYa\/-<
\-<Qdi'o 9rrutia\/-<
\/^TCW<
\/H;MM<
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
<S76 en Python
http-00uche,ogbu(i,net0tech0aIara0nodes0TMM^4M[4M[0
python4.slt
http-00.!lso&t,org0python,ht!l 37inu.5
http-00users,sIynet,be0sbi0lib.!l4python0 3Hindo2s5
2.Python 3http-00222,2.python,org05
Python2in 3
http-00222,python,org02indo2s0python2in05
Py=6a 3http-00222,pygtI,org05
Py]t 3http-00222,riverbanIco!puting,co,uI0py%t05
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
=UIs en Python 4 I
;Linter
axaid'ets
-y7;_
-yF;
-ython%in
,,,
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
6Iinter
1ultiplata&or!a 37inHin1ac5
"cil de progra!ar
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
E(e!plo 6Iinter I
# 'ui/tL/tLinter%at*h&py
from ;Linter import Z
import time, sys
*lass Stopaat*h([rame:
""" Qmplements a stop %at*h frame %id'et& """
def KKinitKK(self, parentBJone, ZZL%:
[rame&KKinitKK(self, parent, L%
self&Kstart B 2&2
self&Kelapsedtime B 2&2
self&Krunnin' B 2
self×tr B Strin'Par(
self&maLeaid'ets(
def maLeaid'ets(self:
""" MaLe the time label& """
l B Mabel(self, textvariableBself×tr
self&Kset;ime(self&Kelapsedtime
l&pa*L(fillBb, expandBJT, padyB!, padxB!
def Kupdate(self:
""" 9pdate the label %ith elapsed time& """
self&Kelapsedtime B time&time( ( self&Kstart
self&Kset;ime(self&Kelapsedtime
self&Ktimer B self&after(42, self&Kupdate
def Kset;ime(self, elap:
""" Set the time strin' to Minutes:Se*onds:Hundreths """
minutes B int(elap/32
se*onds B int(elap ( minutesZ32&2
hse*onds B int((elap ( minutesZ32&2 ( se*ondsZ122
self×tr&set(AX2!d:X2!d:X2!dA X (minutes, se*onds, hse*onds
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
E(e!plo 6Iinter II
def Start(self:
""" Start the stop%at*h, i'nore if runnin'& """
if not self&Krunnin':
self&Kstart B time&time( ( self&Kelapsedtime
self&Kupdate(
self&Krunnin' B 1
def Stop(self:
""" Stop the stop%at*h, i'nore if stopped& """
if self&Krunnin':
self&afterK*an*el(self&Ktimer
self&Kelapsedtime B time&time( ( self&Kstart
self&Kset;ime(self&Kelapsedtime
self&Krunnin' B 2
def Veset(self:
""" Veset the stop%at*h& """
self&Kstart B time&time(
self&Kelapsedtime B 2&2
self&Kset;ime(self&Kelapsedtime
if KKnameKK BB AKKmainKKA: root B ;L(
s% B Stopaat*h(root
s%&pa*L(sideB;T-
^utton(root, textBAStartA, *ommandBs%&Start&pa*L(sideBMR[;
^utton(root, textBAStopA, *ommandBs%&Stop&pa*L(sideBMR[;
^utton(root, textBAVesetA, *ommandBs%&Veset&pa*L(sideBMR[;
^utton(root, textBAFuitA, *ommandBsys&exit(2&pa*L(sideBMR[;
root&mainloop(
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
2.Python I
1a.i!i$a la portabilidad
/o sie!pre es necesario 3o
conveniente5 crear de !anera
progra!tica las inter&aces en
%x-ython,
2.=lade 3http-002.glade,source&orge,net05
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
Py=6a
1ultiplata&or!a-
De!o-
py'tL(demo&py
, python /usr/share/do*/python!&.('tL!/examples/py'tL(
demo&py
El bucle de eventos
7la!ar a 'tLKinit
7la!ar a 'tLKmain
7la!ar a 'tLKmainK>uit
'tL&main35
'tL&mainKloop35
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
Progra!ando en Py=6a 4 K
#'ui/'tL/'tL1&py
import 'tL
def metodo(Zar's:
print "Rntro en 'tL&mainK>uit"
'tL&mainK>uit(
print "Sal'o de 'tL&mainK>uit"
%in B 'tL&aindo%(
%in&*onne*t("deleteKevent",metodo
%in&sho%(
print "Rntro en 'tL&main"
'tL&main(
print "Sal'o de 'tL&main"
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
Progra!ando en Py=6a 4 KI
% B 'tL&aindo%(
%&fulls*reen( #fulls*reen
%&maximiYe( #maximiYa
%&i*onify( #minimiYa
%&dei*onify( #restaura
%&setKtitle(=titulo] #t?tulo
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
Progra!ando en Py=6a 4 KII
P^ox vertical!ente
H^ox hori$ontal!ente
Ker 'tL/&py
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
Progra!ando en Py=6a 4 I<
Eventos-
Eventos co!unes-
Ker 'tL.&py
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
Progra!ando en Py=6a 4 <
I!genes- 'tL&Qma'e
import 'tL
def salir(Zar's:
'tL&mainK>uit(
% B 'tL&aindo%(
%&*onne*t(AdeleteKeventA,salir
im' B 'tL&Qma'e(
im'&setKfromKfile("'host&Np'"
%&add(im'
%&sho%Kall(
'tL&main(
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
Progra!ando en Py=6a 4 <I
Utili$ando 7C_
Ker ima'enes/ima'enes.&py
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
Progra!ando en Py=6a 4 <II
Cansar
>esultar di&icil
Ker 'lade/'lade1&py
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
1s sobre el lengua(e
help(lo>uesea
pydo* mDdulo
pydo* mDdulo
pydo* (p puerto
pydo* ('
Ker /do*/
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
"iltros
E(e!plo 3G avanY/filtros&py5-
<<< palabra B =hola]
<<< print AA&Noin(6!Zi for i in palabra:
hhoollaa
<<< 6!Zi for i in ran'e(12 if i X ! BB 2:
62,.,5,1!,13:
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
"unciones especiales 4 I
Punteros a &uncin
Punteros a !todos
*lass 0:
def KKinitKK(self,nombre:
self&nombre B nombre
def f(self:
print "hola, soy",self&nombre
puntero B 0&f #puntero es un puntero al mGtodo, no es llamable sin m@s
a B 0("mi nombre" #para utiliYarlo, le tenemos >ue pasar una instan*ia
puntero(a #Me llama pas@ndole *omo self, a
print puntero #Ce he*ho, puntero es un unbound method de 0
#Si >uisieramos un mGtodo de 0 bounded a una instan*ia, tendr?amos >ue ha*er esto:
otroKpuntero B a&f #f de la instan*ia, no de la *lase
print otroKpuntero #Rste s? es un bound method
otroKpuntero( #W este s? es llamable
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
7a!bda
Ker avanY/fun*iones/yield&py
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
Sobrecarga de operaciones 4 I
Si accedes a instan*ia&KJombre8laseKKdato
8seguro %ue sabes lo %ue ests haciendo9
3Jame man'lin'5
avan$0clases0oculta!iento[,py
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
:culta!iento de in&or!acin
E(e!plos en
/avanY/*lases/a**ediendoKprivadoKenKotr
osKlen'uaNes
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
:culta!iento de in&or!acin
E(e!plo en /avanY/*lases/o*ultamiento!&py
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
:culta!iento de in&or!acin
obNe*t-
KK'etattributeKK(self,nombre- se le lla!a
cuando alguien intenta acceder a cual%uier
cosa incluso si e.iste
KKsetattr(self,nombre,valor- se le lla!a
cuando alguien intenta !odi&icar cual%uier
cosa incluso si e.iste
Ker avanY/*lases/o*ultamiento/&py
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
@erencia !Fltiple
En CN y Java se evita
avanY/*lases/heren*iaKmultiple&*pp
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
@erencia !Fltiple
avanY/*lases/heren*iaKmultiple&py
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
>ecoleccin de basura
I1P:>6+/6E- avanY/'*/referen*ias1&py
<<< *lass 0:
&&& def KKdelKK(self:
&&& print =Me muero!]
&&&
<<< a B 0( #a apunta a una instan*ia de 0
<<< a B 4 #0hora a apunta a otro lado: la instan*ia no es referen*iada y se elimina
Me muero!
<<< a B 0( #a apunta a otra instan*ia de 0
<<< del a #Rliminamos a& Wa no existe la referen*ia: la instan*ia se muere
Me muero!
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
>ecoleccin de basura
Cuidado
avanY/'*/referen*ias!&py
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
>ecoleccin de basura
Cuidado
KKdelKK
,,,
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
>e&lection en Python
'etattr3algono!bre5
#asattr3algono!bre5
avanY/refle*tion/refle*tion1&py
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
>e&lection en Python
setattr3algono!brevalor5
delattr3algono!bre5
avanY/refle*tion/refle*tion!&py
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
>e&lection en Python
KKdi*tKK
avanY/refle*tion/refle*tion/&py
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
>e&lection en Python
Un largo etc,
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
+van$ando en Python
lo*als( 'lobals(
avanY/avanYando/avanYando1&py
S#- avanY/avanYando/avanYando!&py
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
Instancias y clases
avanY/avanYando/avanYando/&py
avanY/avanYando/avanYando.&py
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
1s propiedades din!icas
eval
exe*
avanY/avanYando/avanYando4&py
Introduccin a Python
2006 Pablo Ordua, Arkaitz Ruiz e-ghost ESIDE Universidad de Deusto
Proble!as con estas
propiedades
Proble!as
Ilegibilidad
Seguridad
Proble!as
Seguridad
http-00paginaspersonales,deusto,es0dipina0
http-00nctrun,e4ghost,net0
http-00diveintopython,org
http-00vig,prenhall,co!0catalog0acade!ic0product0[UM_LM[^MUM_\L[MM,ht!l